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
?
答案 0 :(得分:0)
顺序并不重要,因为在调用next(err)
之前的某些中间件中,您的上一个中间件只会被调用。如果没有其他处理(并完成)请求,那么您的404中间件将始终被调用。
对于您的第二个问题:不,当您使用next()
完成请求时,您不想在其中任何一个中致电res.send()
。
编辑:我会保留这样的顺序,因为404中间件不是真正的错误处理程序。