我使用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);
};
当我访问该路线时
Error: Failed to lookup view "error" in views directory "/Volumes/api_service/init/views"
我试图一起移除视图引擎
//app.set('views', path.join(__dirname, 'views'));
//app.set('view engine', 'jade');
但它会因此错误而大喊
No default engine was specified and no extension was provided
答案 0 :(得分:32)
如果您正在对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
});
});
用这个:
app.use(function(err, req, res, next){
res.status(err.status || 500);
res.send({
message: err.message,
error: err
});
return;
});
答案 1 :(得分:5)
最终是快速通用捕获404使得所有路线都不可用。
去除他解决了它。app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); });