为什么我的快递回复中没有回复我的错误?

时间:2017-06-07 02:16:37

标签: javascript node.js express

我在Express应用程序中设置了默认的错误处理程序。

 app.use(function unhandledErrorHandler(err, req, res, next) {
   res.status(err.status || 500).json({
     error: err
   });
 });

然而,无论何时我调用路由并抛出错误,我都会得到一个看起来像这样的响应。

{
  "error": {}
}

有人可以帮助我理解为什么express将我的错误作为空对象返回?

1 个答案:

答案 0 :(得分:4)

Error个实例显示为空对象的原因是因为.message对象上的常规属性(例如.stackError等)未设置as enumerable和JSON.stringify()(由res.json()使用)忽略不可枚举的属性。

如果您只想发送消息部分(不包括堆栈跟踪),您可以这样做:

res.json({ error: err.message });

res.json({ error: { message: err.message } });

否则,如果您想要包含可能已添加到Error实例的其他自定义可枚举属性,则可以使.message可枚举,然后使用您现在使用的相同代码:< / p>

Object.defineProperty(err, 'message', { enumerable: true });
res.json({ error: err });