中间件挂起

时间:2018-05-24 22:03:56

标签: node.js express middleware

我有以下中间件只能调用next()

export default function (options) {
  return function (req, res, next) {
    next()
  };
}

我试图像这样使用它:

import mymiddleware from '../middlewares/mymiddleware';

router.post('/', mymiddleware, function(req, res, next) {
  res.status(200).send()
});

当我发布到路线时,它就会挂起。我希望这会返回只返回200 OK(如果我从我的路线中移除mymiddleware就会这样做)

1 个答案:

答案 0 :(得分:1)

您正在导出一个在调用时返回中间件函数的函数。您必须调用该外部函数来获取中间件函数。你没有打电话给它。

所以,你将一个函数作为中间件传递,它只返回另一个从未被调用的函数,因此它永远不会调用next(),因此你的路径似乎只是卡住了。

您可以通过两种方式修复它。首先,您可以将导出更改为仅导出直接中间件功能:

export default function (req, res, next) {
    next()
}

或者,其次,如果您需要保留嵌套体系结构,以便在使用它时可以传递它,则必须实际调用它并将所需选项传递给它:

import mymiddleware from '../middlewares/mymiddleware';

router.post('/', mymiddleware(someOptions), function(req, res, next) {
  res.status(200).send()
});