是否有可能使用Express 4向前端发送JSON响应,指示存在错误,以及在Express中间件内调用next(err),以便可以通过服务器呢?或者这些电话完全相互排斥?
我目前的假设是你可以这样做:
app.get('/', function(req, res, next) {
res.json({ error : true });
});
你可以这样做:
app.get('/', function(req, res, next) {
next(new Error('here goes the error message');
});
但你不能这样做
app.get('/', function(req, res, next) {
res.json({ error : true });
next(new Error('here goes the error message');
});
你不能这样做:
app.get('/', function(req, res, next) {
next(new Error('here goes the error message');
res.json({ error : true });
});
答案 0 :(得分:6)
他们并不是互相排斥的。例如(代替中间件我使用路由处理程序来演示,但两者的原理相同):
app.get('/', function(req, res, next) {
res.json({ error : true });
next(new Error('something happened'));
});
app.get('/another', function(req, res, next) {
next(new Error('something happened'));
});
app.use(function(err, req, res, next) {
console.error(err);
if (! res.headersSent) {
res.send(500);
}
});
您可以检查错误处理程序中的res.headersSent
以确保发送响应(如果没有,错误处理程序应自行发送响应)。