在express中将错误传递给客户端

时间:2016-06-11 21:37:23

标签: node.js express

如何将快速错误消息传递给快递中的客户端?

app.use(errorHandler);

function errorHandler(err, req, res, next) {
  res.send(err);
}

app.post('/login', usernameIsValid, pwdIsValid, createToken);

usernameIsValid我创建一个包含消息和状态的new Error并致电next(err)。现在绕过pwdIsValidcreateToken就好了,但是奇怪的是我的errorHandler在没有console.log的情况下记录错误。我在某个地方使用默认错误处理程序吗?我该如何关闭它?我已经为NODE_ENV尝试了生产和开发。

在客户端xhr.responseText上是我的error.message +看起来像堆栈跟踪?我甚至试图发送err.message,但它看起来一样。

处理这种混乱的一种方法是使每个中间件(如果有错误)创建一个错误字符串,如req.data.err = "invalid username",然后确保每个后续中间件检查req.data.err字符串是否存在。但这很乏味,因为地狱> _<

2 个答案:

答案 0 :(得分:0)

来自快速文档site

如果您将错误传递给next()并且您没有在错误处理程序中处理它,它将由内置错误处理程序处理;错误将通过堆栈跟踪写入客户端。堆栈跟踪不包含在生产环境中。

因此,如果您想避免堆栈跟踪,只需将NODE_ENV设置为生产即可执行您的应用程序。

按如下方式运行您的应用程序:

$ NODE_ENV=production node file.js

答案 1 :(得分:0)

我解决了。您需要在所有其他路由之后应用错误处理程序app.use(errorHandler) dead last 。这会禁用内置错误处理程序。现在您可以将漂亮的错误消息传递给客户端。

了解更多here

编辑 process.env.NODE_ENV并不重要。