【问题标题】:How to wrap multiple middleware functions into one?如何将多个中间件功能包装成一个?
【发布时间】:2015-04-07 12:49:29
【问题描述】:

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

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'});
}

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

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

  // validate
  // checkValid
  // respond
}

app.use('/', respondIfValid);

代替:

app.use('/', validate, checkValid, respond);

【问题讨论】:

  • 这个中间件的目标是成为一个原子单元吗?或者换一种方式问,将所有逻辑放在一个函数中有什么问题?
  • 我一般很好奇中间件能不能用上面的方式。

标签: javascript node.js express


【解决方案1】:

试试下面的代码

app.use('/', [validate, checkValid,respond]);

var middleware = [validate, checkValid,respond];

app.use('/', middleware );

需要将该系列中的所有功能作为执行要求。

谢谢

【讨论】:

  • 理想情况下middleware 将是一个函数。
  • 您可以在不包含数组的情况下封装所有函数。这样我们就可以直接通过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多