Javascript 使用Express 4在Node.js中全局处理异常的最佳方法?
由于我们在asp.net MVC中有异常过滤器,所以我们在node.js中是否也有类似的功能 我尝试了以下文章,但没有找到理想的解决方案 我也在app.js上尝试了以下内容Javascript 使用Express 4在Node.js中全局处理异常的最佳方法?,javascript,jquery,asp.net-mvc,node.js,express,Javascript,Jquery,Asp.net Mvc,Node.js,Express,由于我们在asp.net MVC中有异常过滤器,所以我们在node.js中是否也有类似的功能 我尝试了以下文章,但没有找到理想的解决方案 我也在app.js上尝试了以下内容 process.on('uncaughtException', function (err) { console.log(err); }) 参考条款: 任何帮助都是值得的。要在节点中添加全局异常处理程序,请打开事件。使用process.on捕捉它们 process.on('uncaughtException', (e
process.on('uncaughtException', function (err) {
console.log(err);
})
参考条款:
任何帮助都是值得的。要在节点中添加全局异常处理程序,请打开事件。使用
process.on
捕捉它们
process.on('uncaughtException', (err) => {
console.log('whoops! there was an error');
});
在express中,标准做法是附加一个全面捕获错误处理程序。 赤裸裸的错误处理程序如下所示
// Handle errors
app.use((err, req, res, next) => {
if (! err) {
return next();
}
res.status(500);
res.send('500: Internal server error');
});
除此之外,您还需要捕获任何可能发生的错误,并在
next()
中将其作为参数传递。这将确保“捕获所有”处理程序捕获错误。错误可能来自不同的位置并在不同的位置捕获,因此建议在处理所有类型错误的集中对象中处理错误。例如,错误可能发生在以下位置:
1.在web请求中出现同步错误时使用Express中间件
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);
}
有关更多信息(+其他最佳实践和超过35个引用和代码示例)为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();
}));
它不会全局捕获异常。@AshishKumar:您试图捕获的错误是什么?如果整个应用程序中出现任何异常,那么它应该从一个地方处理。正如我们在asp.net mvc中使用异常过滤器所做的那样。我已经在google上搜索并在express中找到了这个解决方案,但我正在寻找类似asp.net mvc的异常过滤器的东西