如何将快速错误消息传递给快递中的客户端?
app.use(errorHandler);
function errorHandler(err, req, res, next) {
res.send(err);
}
app.post('/login', usernameIsValid, pwdIsValid, createToken);
在usernameIsValid
我创建一个包含消息和状态的new Error
并致电next(err)
。现在绕过pwdIsValid
和createToken
就好了,但是奇怪的是我的errorHandler在没有console.log
的情况下记录错误。我在某个地方使用默认错误处理程序吗?我该如何关闭它?我已经为NODE_ENV
尝试了生产和开发。
在客户端xhr.responseText
上是我的error.message +看起来像堆栈跟踪?我甚至试图发送err.message,但它看起来一样。
处理这种混乱的一种方法是使每个中间件(如果有错误)创建一个错误字符串,如req.data.err = "invalid username"
,然后确保每个后续中间件检查req.data.err
字符串是否存在。但这很乏味,因为地狱> _<
答案 0 :(得分:0)
来自快速文档site
如果您将错误传递给next()并且您没有在错误处理程序中处理它,它将由内置错误处理程序处理;错误将通过堆栈跟踪写入客户端。堆栈跟踪不包含在生产环境中。
因此,如果您想避免堆栈跟踪,只需将NODE_ENV设置为生产即可执行您的应用程序。
按如下方式运行您的应用程序:
$ NODE_ENV=production node file.js
答案 1 :(得分:0)
我解决了。您需要在所有其他路由之后应用错误处理程序app.use(errorHandler)
dead last 。这会禁用内置错误处理程序。现在您可以将漂亮的错误消息传递给客户端。
了解更多here。
编辑 process.env.NODE_ENV
并不重要。