gpt4 book ai didi

node.js - 通过app.use进行中央错误处理

转载 作者:行者123 更新时间:2023-12-03 08:19:28 24 4
gpt4 key购买 nike

嗨,我想在Express中实现集中式错误处理,我已经做到了。

app.use(function(err,req,res,next){
logger.error(err);
utils.jsonOutHandler(err,null,res);
next(err);
});

app.get('/',(req,res)=>{
throw new Error('Testing');
});

我还制作了一个特殊的jsonOutHandler方法,该方法将正确的响应发送给用户。
function jsonOutHandler(err, result, out) {
if (err) {
let status = 500;
const message = 'Something broke';
if (err instanceof DbError) {
status = 500;
}
if (err instanceof ValidationError) {
status = 400;
}
if (err instanceof SystemError) {
status = 500;
}
out.status(status).send({message});
return;
}

out.status(result.status).send({data: result.data});

}

但是,每当我在“/”路由上抛出错误时,我的错误处理程序就永远不会触发。为什么?

最佳答案

Express是基于中间件的,因此,如果您想捕获中间件中的错误,则应调用错误中间件:

app.get('/',(req,res)=>{
next(new Error('Testing'));
});

/**
* middleware to catch errors happened before this middleware
* express knows this middleware is for error handling because it has
* four parameters (err, req, res, next)
**/
app.use((err, req, res, next) => {
res.status(500).send({
message: err.message,
});
});


希望您可以将此示例适应您的要求。要记住的是,可以从以前的中间件使用错误的中间件。在您的示例中,您无法捕获错误,因为中间件是在主路由器app.get('/')之前定义的

关于node.js - 通过app.use进行中央错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61069102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com