Javascript 使用Express 4在Node.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

由于我们在asp.net MVC中有异常过滤器,所以我们在node.js中是否也有类似的功能

我尝试了以下文章,但没有找到理想的解决方案

我也在app.js上尝试了以下内容

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的异常过滤器的东西