我在Express应用程序中设置了默认的错误处理程序。
app.use(function unhandledErrorHandler(err, req, res, next) {
res.status(err.status || 500).json({
error: err
});
});
然而,无论何时我调用路由并抛出错误,我都会得到一个看起来像这样的响应。
{
"error": {}
}
有人可以帮助我理解为什么express将我的错误作为空对象返回?
答案 0 :(得分:4)
Error
个实例显示为空对象的原因是因为.message
对象上的常规属性(例如.stack
,Error
等)未设置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 });