簡體   English   中英

錯誤處理程序如何工作?

[英]How does the Error Handler work?

錯誤處理程序如何觸發?

在示例代碼中,我發現它位於所有中間件功能的底部。 這個職位重要嗎?

您可以參考以下示例以了解一些詳細信息。 在這里,對於“ /” GET端點,中間件顯式拋出錯誤“問題錯誤”。 此時,將觸發快速錯誤處理程序機制,並尋找一個錯誤處理程序(以err作為參數)。 結果,后續的“ Hello”不會發送回客戶端,因為其處理程序不是錯誤。

隨后的錯誤處理程序logErrors,clientErrorHandler和errorHandler被一個接一個地調用以執行相關任務,最后一個則寫回響應。

將它們放置在末尾的原因是捕獲聲明的中間件引發的錯誤並對其進行優雅處理(即打印,記錄日志,發送郵件等)。可以使用其他語言(如Java)中的try catch機制來考慮它。 如果在其他中間件之上聲明,則它們將變得無用,因為不會處理錯誤。 通過將“ GET”請求的順序與錯誤處理程序交換,可以看到輸出的差異。

 const express = require('express'); const app = express(); app.get('/', (req, res, next) => next(new Error('problem error')), (req, res) => { res.status(200).send("Hello"); }); app.use(logErrors); app.use(clientErrorHandler); app.use(errorHandler); function logErrors (err, req, res, next) { console.error(err.stack) next(err) } function clientErrorHandler (err, req, res, next) { if (req.xhr) { res.status(500).send({ error: 'Something failed!' }) } else { next(err) } } function errorHandler (err, req, res, next) { if (res.headersSent) { return next(err) } res.status(500) res.render('error', { error: err }) } app.listen(3000, () => console.log('Example app listening on port 3000!')) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM