[英]Best way to Handle Exception Globally in Node.js with Express 4?
AS我們在asp.net MVC中有異常過濾器,我們在node.js中是否也有類似的功能與express 4?
我嘗試了以下文章,但沒有找到所需的解決方案。
http://www.nodewiz.biz/nodejs-error-handling-pattern/
我也試過下面的 app.js
process.on('uncaughtException', function (err) {
console.log(err);
})
參考文章: http : //shapeshed.com/uncaught-exceptions-in-node/
任何幫助將是可觀的。
錯誤可能來自並在不同位置捕獲,因此建議在處理所有類型錯誤的集中對象中處理錯誤。 例如,錯誤可能發生在以下地方:
1.Express中間件以防萬一Web請求中出現SYNC錯誤
app.use(function (err, req, res, next) {
//call handler here
});
2.CRON 作業(計划任務)
3.你的初始化腳本
4.測試代碼
5.未捕獲的錯誤
process.on('uncaughtException', function(error) {
errorManagement.handler.handleError(error);
if(!errorManagement.handler.isTrustedError(error))
process.exit(1)
});
6.未處理的承諾拒絕
process.on('unhandledRejection', function(reason, p){
//call handler here
});
然后當您捕獲錯誤時,將它們傳遞給一個集中的錯誤處理程序:
module.exports.handler = new errorHandler();
function errorHandler(){
this.handleError = function (error) {
return logger.logError(err).then(sendMailToAdminIfCritical).then(saveInOpsQueueIfCritical).then(determineIfOperationalError);
}
有關更多信息,請閱讀此處的第 4 項(+ 其他最佳實踐和超過 35 個引號和代碼示例)
在 express 中,附加一個捕獲所有錯誤處理程序是標准做法。 准系統錯誤處理程序看起來像
// Handle errors
app.use((err, req, res, next) => {
if (! err) {
return next();
}
res.status(500);
res.send('500: Internal server error');
});
除此之外,您還需要在可能發生的任何地方捕獲錯誤並將它們作為參數傳遞給next()
。 這將確保 catch all 處理程序捕獲錯誤。
在 node 中添加全局異常處理程序是process上的事件。 使用process.on
來捕捉它們。
process.on('uncaughtException', (err) => {
console.log('whoops! there was an error');
});
編寫一個中間件來處理 express js 中的所有路由,如下所示
function asyncTryCatchMiddleware(handler){
return async (req,res,next) => {
try{
await handler(req,res);
} catch(e) {
next(e)
}
};
}
您可以像這樣使用中間件:
router.get('/testapi',asyncTryCatchMiddleware(async (req,res)=>{
res.send();
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.