Web*_*ube 18 routing node.js express
我正在使用express 4来创建一个json API服务.我似乎无法定义它来发送一个简单的json而不试图渲染视图.
var express = require('express');
var router = express.Router();
module.exports = function (app, namespace) {
router.get('/', function(req, res) {
res.json({'body': 123});
});
app.use(namespace + '/v1', router);
};
Run Code Online (Sandbox Code Playgroud)
当我访问路线时
Error: Failed to lookup view "error" in views directory "/Volumes/api_service/init/views"
Run Code Online (Sandbox Code Playgroud)
我试图一起删除视图引擎
//app.set('views', path.join(__dirname, 'views'));
//app.set('view engine', 'jade');
Run Code Online (Sandbox Code Playgroud)
但是它会因为这个错误而大叫
No default engine was specified and no extension was provided
Run Code Online (Sandbox Code Playgroud)
小智 34
如果您正在res.render通过'express generate'生成的错误处理程序中进行任何调用,那么您将看到您描述的错误.对于json API服务,您可能不需要呈现任何内容,因此只需不要调用render(),而是调用res.send()res.status状态设置为404或500.
所以基本上,替换这个:
app.use(function(err, req, res, next) {
res.render('error', {
message: err.message,
error: err
});
});
Run Code Online (Sandbox Code Playgroud)
有了这个:
app.use(function(err, req, res, next){
res.status(err.status || 500);
res.send({
message: err.message,
error: err
});
return;
});
Run Code Online (Sandbox Code Playgroud)
最终它是快速通用捕获404,使所有路线不可用.
Run Code Online (Sandbox Code Playgroud)app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); });
删除他解决了它.
| 归档时间: |
|
| 查看次数: |
10564 次 |
| 最近记录: |