我在我的 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 });