Express4中文文档
Express 带有一个内置的错误处理程序,可以处理应用程序中可能遇到的任何错误。这个默认的错误处理中间件函数被添加到中间件函数栈的末尾。
如果您将错误传递给 next()
并且您没有在自定义错误处理程序中处理它,它将由内置错误处理程序处理;错误将通过堆栈跟踪写入客户端。堆栈跟踪不包含在生产环境中。
将环境变量
NODE_ENV
设置为production
,以在生产模式下运行应用程序。
写入错误时,会在响应中添加以下信息:
res.statusCode
由 err.status
(或 err.statusCode
)设置。如果此值超出 4xx 或 5xx 范围,则将设置为 500。res.statusMessage
根据状态码设置。err.stack
。err.headers
对象中指定的任何标头。如果您在开始编写响应后调用 next()
并出现错误(例如,如果您在将响应流式传输到客户端时遇到错误),Express 默认错误处理程序将关闭连接并使请求失败。
因此,当您添加自定义错误处理程序时,您必须委托默认的 Express 错误处理程序,此时标头已发送到客户端:
function errorHandler (err, req, res, next) {
if (res.headersSent) {
return next(err)
}
res.status(500)
res.render('error', { error: err })
}
请注意,如果您多次调用 next()
并在代码中出现错误,则可能会触发默认错误处理程序,即使自定义错误处理中间件已到位。