如何将多个中间件功能包装成一个?

sab*_*bof 6 javascript node.js express

我有许多类似于以下的中间件功能:

function validate(req, res, next) {
  req.validationError = new Error('invalid');
}

function checkValid(req, res, next) {
  if (req.validationError) {
    next(req.validationError);
  } else {
    next();
  }
}

function respond() {
  res.json({result: 'success'});
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将它们包装成一个函数?所以我会做这样的事情:

function respondIfValid(req, res, next) {
  // Evoke the following middleware: 

  // validate
  // checkValid
  // respond
}

app.use('/', respondIfValid);
Run Code Online (Sandbox Code Playgroud)

代替:

app.use('/', validate, checkValid, respond);
Run Code Online (Sandbox Code Playgroud)

Din*_*aws 5

尝试使用以下代码

app.use('/', [validate, checkValid,respond]);
Run Code Online (Sandbox Code Playgroud)

或者

var middleware = [validate, checkValid,respond];

app.use('/', middleware );
Run Code Online (Sandbox Code Playgroud)

需要根据您的执行要求放置该系列中的所有功能。

谢谢

  • 理想情况下,“中间件”应该是一个函数。 (4认同)