2017-06-07 84 views
1

我在我的快速应用程序中设置了默认错误处理程序,因此如此。为什么我的错误在我的快速回复中没有被返回?

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

但是,每当我调用一个路由并引发错误时,我得到的响应看起来像这样。

{ 
    "error": {} 
} 

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

+1

您是否在路由的最后定义了中间件功能? –

+0

是的,它在其他方面的工作完全如预期。如果我将'{error:err}'更改为'{error:err.stack}',我可以得到我期待的结果,我对Error Object/express的机制更加好奇。 –

回答

4

原因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 }); 
+0

感谢您的快速彻底的答案! –

相关问题