我很好奇,当我们有多个错误处理程序时,express如何决定要调用哪个错误处理程序(next(err))。
答案 0 :(得分:2)
如果您有多个错误处理程序,则会按照将它们放入.use语句的顺序来调用它们。为了传递错误,每个错误处理程序都必须执行next(err)。
来自expressjs文档:
app.use(logErrors)
app.use(clientErrorHandler)
app.use(errorHandler)
以文档中的示例为例:
function errorHandler (err, req, res, next) {
if (res.headersSent) {
return next(err)
}
res.status(500)
res.render('error', { error: err })
}
因此,使用next(err)语句将错误从处理程序传递到处理程序。在该处理程序中,您可以决定要做什么。例如,您可以检查特定错误,然后仅对特定错误采取行动。