表达js 4如何在不渲染任何视图/ css的情况下提供json结果

时间:2014-04-25 14:32:10

标签: node.js express routing

我使用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

2 个答案:

答案 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);
});
去除他解决了它。