2017-06-07 103 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

感謝您的快速徹底的答案! –

相關問題