错误处理和404处理中间件的顺序?

时间:2016-08-26 22:04:55

标签: javascript node.js express middleware

express.js网站让我困惑,因为有两个相互矛盾的陈述:

  

您可以在其他app.use()之后定义错误处理中间件,并路由调用
   - /guide/error-handling.html

  

您需要做的就是在堆栈的最底部(在所有其他功能下方)添加中间件功能以处理404响应
   - /starter/faq.html

似乎告诉我这些中间件层都应该是堆栈中的最后一层......?嗯,那么,我打算最后添加两个app.use中间件层?这是不可能的......

无论如何,显然其中一个页面忘了提到另一个的例外,所以我想知道:我应该注册哪个中间件?我的错误处理程序或我的404处理程序?

我想要这两个功能,但我不确定他们需要哪个顺序才能使快递正常工作:

app.use(function(req, res, next) {
  res.status(404).send('Sorry cant find that!');
});

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

我也想知道,我是否需要从任一处理程序中调用next

1 个答案:

答案 0 :(得分:0)

顺序并不重要,因为在调用next(err)之前的某些中间件中,您的上一个中间件只会被调用。如果没有其他处理(并完成)请求,那么您的404中间件将始终被调用。

对于您的第二个问题:不,当您使用next()完成请求时,您不想在其中任何一个中致电res.send()

编辑:我会保留这样的顺序,因为404中间件不是真正的错误处理程序。