2013-03-09 60 views
2

如果我定義的錯誤處理中間件快遞,像這樣:快速錯誤處理 - 獲取狀態代碼

app.use(function(err,req,res,next){ 
    // Do Stuff 
}); 

如何得到錯誤的HTTP狀態代碼(或做我只是假設的是一個500)?

謝謝
阿里

回答

5

總之,你的代碼必須決定根據你的錯誤處理中間件內處理特定的錯誤相應的錯誤代碼。

此時不一定會生成HTTP狀態碼。按照慣例,當我從中間件函數或路由器處理函數調用next(error)時,我將code屬性設置爲使我的錯誤處理中間件可以執行res.status(err.code || 500).render('error_page', error);或其他行。但是,您是否希望將這種方法用於常見的404錯誤或者只有5XX服務器錯誤或其他方面。表達本身或大多數中間件時,很少有東西會在向next回調傳遞錯誤時提供http狀態碼。

對於一個具體的例子,假設有人試圖在我的應用程序中註冊一個用戶帳戶,並且我發現它已經在數據庫中註冊了,我可能會做return next(new AlreadyRegistered());,其中AlreadyRegistered構造函數會將this.code = 409; //Conflict屬性放在錯誤實例,所以錯誤處理中間件會發送該409狀態碼。 (對於這種「正常操作條件」錯誤,在正常的路由鏈中處理這個錯誤是否更好使用錯誤處理中間件,這在設計方面是有爭議的,但希望這個例子是說明性的)。

僅供參考我也建議httperrors npm module它提供了一個statusCode財產的名稱包裝類。我在一些項目中使用了這個效果很好。