gpt4 book ai didi

node.js - 如何处理从Express,NodeJS中的路由处理程序调用的函数中的错误?

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

这可能是非常愚蠢的,但是我对此并没有太多了解,因为我不知道应该如何搜索。

我有一个路由处理程序,它可以根据某些请求参数来调用不同的函数,并且我想知道处理函数内部错误以便将错误传递给错误处理中间件的最佳方法是什么。
考虑这样的事情:

router.get('/error/:error_id', (req, res, next) => {
my_function();
}

function my_function(){
// do something async, like readfile
var f = fs.readFile("blablabla", function (err, data) {
// would want to deal with the error
});
}

如果在 fs.readFile期间发生错误,如何将错误传递给 next以将其转发到错误中间件?唯一的解决方案是将下一个参数传递给函数功能 my_function(next){...}

如果该函数没有调用任何异步I/O操作,则在路由处理程序中一个简单的 try/catch就可以了(我想),如下所示:
router.get('/error/:error_id', (req, res, next) => {
try{
my_function();
} catch(e){
next(e);
};
}

function my_function(){
// do stuff
var f = fs.readFileSync("blablabla"); // possibly throws an error
}

希望我有道理。

最佳答案

您完全正确,应该将next回调传递给my_function,因为fs.readFile是异步的。

router.get('/error/:error_id', (req, res, next) => {
my_function(next);
}

function my_function(next) {
fs.readFile("blablabla", function (err, data) {
if (err) {
next(err);
} else {
// Process the data
// Don't forget to call `next` to send respond the client
}
});
}

顺便说一句,你不能做
var f = fs.readFile(...)

因为 fs.readFile是异步的。数据应在回调中处理。

关于node.js - 如何处理从Express,NodeJS中的路由处理程序调用的函数中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279911/

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