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

Order of the error-handling and 404-handling middlewares?

本文关键字:处理 顺序 中间件 错误      更新时间:2023-09-26

express.js网站把我弄糊涂了,因为有两个相互矛盾的陈述:

最后定义错误处理中间件,在其他app.use()和路由调用
之后定义——/指导/error-handling.html

你所需要做的就是在堆栈的最底部(在所有其他函数下面)添加一个中间件函数来处理404响应
——/起动器/faq.html

它似乎在告诉我这两个中间件层应该是堆栈中的最后一个…?嗯,那又怎样,我最后要添加两个app.use中间件层吗?这是不可能的……


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

我想要这两个函数,但我不确定他们需要在express正常工作的顺序:

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 ?

这个顺序并不重要,因为你的最后一个中间件只会被调用,当在一些中间件中next(err)被调用之前。如果没有其他东西处理(并完成)请求,则始终会调用404中间件。

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

编辑:我会离开这样的订单,虽然404中间件不是一个真正的错误处理程序。