表达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结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在不渲染的情况下从 forwardref 组件添加 ref?