如何将多个中间件函数合并成一个?

7

我有一些类似于以下中间件函数:

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

这个中间件的目标是成为一个原子单元吗?或者换句话说,把所有逻辑都放在一个函数里有什么问题吗? - Brennan
我很好奇中间件是否可以以上述方式使用。 - sabof
1个回答

5
尝试使用以下代码:

尝试使用以下代码

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

或者

var middleware = [validate, checkValid,respond];

app.use('/', middleware );

需要按照您的执行要求将所有函数放置在该系列中。
谢谢。

4
理想情况下,“中间件”应该是一个函数。 - sabof
你可以将所有函数封装起来,而不需要传入一个数组。这样我们就可以直接传递参数。 - Dineshaws

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接