如何将快速参数传递给nodejs异步调用

时间:2017-08-24 18:21:46

标签: node.js express node-modules

这是我面临的问题。 在我的快速中间件的某处,我想检查是否存在文件。

 //Setting up express middeleware...
 app.use(f1);
 app.use(f2);
 ...



 function f1(req, res, next) {
   ...
   //Here I want to check if 'somefile' exists...
   fs.access('somefile', callback1, req, res, next);

 }

 //In the callback, I want to continue with the middleware... 
 function callback1(err, req, res, next) {
   if (err) {
     //Report error but continue to next middleware function - f2
     return next();
   }
   //If no error, also continue to the next middleware function - f2
   return next();
 }

 function f2(req, res, next) {

 }

如何将req,res,next作为fs.access回调的参数传递? 上面的代码不起作用。我怀疑我需要使用闭包但是怎么做?

查看问题的一种完全不同的方式是:我如何使用fs.access本身作为快速中间件函数?

1 个答案:

答案 0 :(得分:1)

对我来说,这种方法更有意义:

假设您要在f1中创建中间件,然后使用中间件来处理错误handleError以及任何其他中间件。

对于f1,你已经拥有了req,res,因此你可以访问fs.access回调。

function f1(req, res, next) {
   fs.access('somefile', (err) => {
     if (err) return next(err);
     // here you already have access to req, res
     return next();
   }
}

function f2(req, res, next) {
   // do some stuff if there is err next(err);
}

function handleError(err, req, res, next) {
   if (err) {
     // handle somehow the error or pass down to next(err);
   }
}

app.use(f1); // you pass down the err |
app.use(f2); //          ------------ |
app.use(handleError); //         <----|