Node.js 如何处理从Express、NodeJS中的路由处理程序调用的函数中的错误?
这可能是非常愚蠢的,但我还没有找到太多关于这一点,因为我不明白我应该如何搜索这个 我有一个路由处理程序,它可以根据一些请求参数调用不同的函数,我想知道处理函数内部错误的最佳方法是什么,以便将错误传递给错误处理中间件。 考虑这样的事情:Node.js 如何处理从Express、NodeJS中的路由处理程序调用的函数中的错误?,node.js,express,error-handling,Node.js,Express,Error Handling,这可能是非常愚蠢的,但我还没有找到太多关于这一点,因为我不明白我应该如何搜索这个 我有一个路由处理程序,它可以根据一些请求参数调用不同的函数,我想知道处理函数内部错误的最佳方法是什么,以便将错误传递给错误处理中间件。 考虑这样的事情: router.get('/error/:error_id', (req, res, next) => { my_function(); } function my_function(){ // do something async, like
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
});
}
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
}
如果在fs.readFile
期间发生错误,如何将错误传递到next
以转发到错误中间件?唯一的解决方案是将下一个参数传递给函数my_函数(next){…}
如果函数没有调用任何异步I/O操作,那么在路由处理程序中执行一个简单的try/catch
就可以了(我想),如下所示:
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
});
}
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
}
希望我有点道理。您完全正确,应该将
下一个
回调传递到我的函数
,因为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
是异步的。数据应该在回调中处理