如果某些底層組件發出錯誤,我如何才能通知express.js堆棧呢?我正在使用一個底層的數據訪問框架,它偶爾會拋出特定的錯誤(例如,當在數據庫中找不到記錄時)。當發生錯誤時,將響應重定向到HTTP 500錯誤處理程序
express.js提供了一種直接跳轉到500錯誤處理程序並將響應重定向到相應頁面的方法嗎?不幸的是,我沒有看到直接的方式來使用標準的express.js方式(使用next
中間件處理程序),除非可能,如果我使用try ... catch無處不在,這也有點開銷
如果某些底層組件發出錯誤,我如何才能通知express.js堆棧呢?我正在使用一個底層的數據訪問框架,它偶爾會拋出特定的錯誤(例如,當在數據庫中找不到記錄時)。當發生錯誤時,將響應重定向到HTTP 500錯誤處理程序
express.js提供了一種直接跳轉到500錯誤處理程序並將響應重定向到相應頁面的方法嗎?不幸的是,我沒有看到直接的方式來使用標準的express.js方式(使用next
中間件處理程序),除非可能,如果我使用try ... catch無處不在,這也有點開銷
通常你不會重定向到500頁。你所做的就是讓異常傳播,如果拋出異常,node.js會爲你做500。
我有一些我遵循的相關規則。也許你會發現它們很有用:
res.send('Error', 500);
我不明白一件事。如果某個組件實際上拋出了異常(throw ne Error(...)),那麼在我的路由器處理程序方法中幾乎沒有任何東西可以向前傳遞該異常,除非使用try ... catch 。否則,該異常只會使節點崩潰應用程序 – preslavrachev
在node.js中,如果發生異常,那麼應該讓應用程序崩潰,並修復引發該異常的錯誤,以及少量異常(如驗證程序模塊)。 這是因爲大多數node.js模塊不會拋出異常,因此node.js中的異常通常表示代碼中存在錯誤。 – sqreept
所以它更多的是一個約定,對。如果您想傳播異常,只需使用「下一個」處理程序(如果有)處理即可。如果你想表明一個嚴重的錯誤,你扔它。它是否正確?這似乎不同於其他環境,如Java,例如 – preslavrachev
東西對於那些誰仍然在尋找一個答案像我這樣它:
1-使用快遞默認的ErrorHandler中間件
app.use(express.errorHandler());
或者
2-提供自己的錯誤處理中間件:
app.use(function (error, req, res, next) {
res.status(500);
res.render("500.jade", {});
});
理想情況下,你會想使用DEV
第一個選項,在PROD
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.use((function (error, req, res, next) {
res.status(500);
res.render("500.jade", {});
});
注二等之一:錯誤處理程序應策略性地放置下面的app.router
如何關於res.send(500,{error:'something blew up'}); ?或者我得到的問題是錯的? – gmaliar
如果我的數據訪問組件引發錯誤,它將超出當前快速路由器方法的範圍。在最簡單的情況下,它會導致節點崩潰的應用程序,除非我使用try ... catch無處不在 – preslavrachev