javascript - 为什么我的错误没有在我的快速回复中返回?

标签 javascript node.js express

<分区>

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

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

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

{
  "error": {}
}

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

最佳答案

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

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

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

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

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

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

关于javascript - 为什么我的错误没有在我的快速回复中返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402435/

相关文章:

javascript - 冷融合下载文件

javascript - 缩小仅由 Node 读取的源代码有什么好处吗?

node.js - 无法验证 URL Facebook Messenger 聊天机器人

node.js - 为什么多层异步函数不能捕获 Node 中最低级别抛出的错误?

javascript - res.redirect 在 Node.js Express 和 Passport.js 身份验证后不起作用

javascript - JS-toFixed 返回一个字符串,但我需要一个 6 位数字

javascript - 测试用例失败

angularjs - 向 Steam 市场发出 GET 请求时出错

javascript - 我将如何附加结果值?

javascript - 如何在 express 中路由 CRUD 操作?