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

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)


Web*_*ube 5

最终它是快速通用捕获404,使所有路线不可用.

app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});
Run Code Online (Sandbox Code Playgroud)

删除他解决了它.