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

Posted

技术标签:

【中文标题】表达js 4如何在不渲染任何视图/css的情况下提供json结果【英文标题】:express js 4 how to serve json results without rendering any views /css 【发布时间】:2014-06-11 08:09:26 【问题描述】:

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

【问题讨论】:

您是否尝试过添加错误视图并查看错误是什么或类似的? 我写了那个错误。这是Error: Failed to lookup view "error" in views directory "/Volumes/api_service/init/views" 【参考方案1】:

如果您正在对res.render 进行任何调用,例如在由“快速生成”生成的错误处理程序中,那么您将看到您描述的错误。对于 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;
);

【讨论】:

【参考方案2】:

最终是快速通用 catch 404 导致所有路线不可用。

app.use(function(req, res, next) 
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
);

删除他解决了它。

【讨论】:

以上是关于表达js 4如何在不渲染任何视图/css的情况下提供json结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在渲染 ejs 视图 Node.js 时捕获错误

关于ASP.NET MVC部分视图渲染问题。

是否可以在不实际渲染画布的情况下创建画布来提取图像数据?

如何在不渲染的情况下从 forwardref 组件添加 ref?

如何在不渲染地图的情况下获取用户位置数据 - Leaflet

如何在不创建组件的情况下从 laravel 刀片视图文件扩展 app.js 方法/数据/手表