这可能是非常愚蠢的,但我对此并没有太多了解,因为我不明白我应该如何搜索它。
我有一个路由处理程序可以根据一些请求参数调用不同的函数,我想知道处理函数内部错误的最佳方法是什么,以便将错误传递给错误处理中间件。 考虑这样的事情:
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
}
希望我有所作为。
答案 0 :(得分:1)
完全正确的是,您应该将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
是异步的。应该在回调中处理数据。