为什么我的错误没有在我的明确回复中返回?

C D*_*ter 1 javascript node.js express

我的快速应用程序中有一个默认的错误处理程序设置。

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

但是,每当我调用路线并抛出错误时,我都会收到如下所示的响应。

{
  "error": {}
}
Run Code Online (Sandbox Code Playgroud)

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

msc*_*dex 7

Error实例显示为空对象的原因是因为对象上的普通属性(.message例如.stack、 等)Error未设置为可枚举并且JSON.stringify()(由 所使用res.json())忽略不可枚举属性。

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

res.json({ error: err.message });
Run Code Online (Sandbox Code Playgroud)

或者

res.json({ error: { message: err.message } });
Run Code Online (Sandbox Code Playgroud)

否则,如果您想包含可能已附加到实例上的其他自定义可枚举属性Error,则可以将其设为.message可枚举,然后使用您现在使用的相同代码:

Object.defineProperty(err, 'message', { enumerable: true });
res.json({ error: err });
Run Code Online (Sandbox Code Playgroud)