我的Express應用程序中有一些錯誤處理,用於異步/等待功能,即。試圖集中處理未被捕獲的錯誤,以適當的狀態代碼/消息進行響應。Node.js Express unhandledRejection removeListener
我做像這樣:
const handleRejection = (res, reason) => {
const { code, message } = reason
console.trace()
logger.error(reason)
// use `res` to send response to client
}
app.use((req, res, next) => {
process.on('unhandledRejection', handleRejection.bind(this, res))
next()
})
process.on('SIGTERM',() => process.removeListener('unhandledRejection', handleRejection))
這工作得很好捕捉/處理錯誤,但是,我的日誌每次觸發一個錯誤的時間填滿。我不相信這個事件聽衆,process.on('unhandledRejection')
,正在被正確刪除...
有沒有解決方案呢?
哦:(忘了app.use被擊中的每一個要求。黨,你能想到的任何其他方式在這個處理程序中訪問'res'對象? – benhowdle89
基本上,我在整個路由處理程序中使用async/await,並且針對各種場景(驗證,數據庫錯誤等)拋出錯誤,並且我想要一箇中心位置來處理返回錯誤到客戶端 – benhowdle89
因此,我讓'拋出新的錯誤'從Promise(async/await)冒泡到這個全局處理程序 – benhowdle89