JSON响应并在Express中调用next()

时间:2015-06-26 19:24:12

标签: node.js express

是否有可能使用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 });
});

1 个答案:

答案 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以确保发送响应(如果没有,错误处理程序应自行发送响应)。