AS 我们在 MVC asp.net 有异常过滤器,我们在 node 中是否有类似的功能.js也有 Express 4?
我尝试过以下文章,但没有找到所需的解决方案。
http://www.nodewiz.biz/nodejs-error-handling-pattern/
我也在下面尝试过应用程序.js
process.on('uncaughtException', function (err) {
console.log(err);
})
参考文章: http://shapeshed.com/uncaught-exceptions-in-node/
任何帮助都是可观的。
错误可能来自不同的位置并捕获,因此建议在处理所有类型的错误的集中式对象中处理错误。例如,错误可能发生在以下位置:
1.在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()
中的参数传递。这将确保捕获所有处理程序捕获错误。
在节点中添加全局异常处理程序是进程上的事件。使用process.on
来捕捉它们。
process.on('uncaughtException', (err) => {
console.log('whoops! there was an error');
});
Express js v4 全局错误处理。
app.use((_req,_res,next)=>{
const error = new Error("Not Found")
error.status= 404;
next(error)
})
app.use((error,_req,res,_next)=>{
if(error.status){
return res.status(error.status).json({
message:error.message,
})
}
res.status(500).json({message:'something wrong'})
})
编写一个中间件来处理 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();
}));