快速中间件和路由上的参数处理排序

时间:2015-03-10 11:23:56

标签: node.js express middleware

所以我正在运行一些API测试,我注意到一个测试失败了,因为它在中间件之前运行了一些参数处理逻辑,现在这里是一个路由定义的例子:

app.post("/something/:some_param",
    middlewareA, middlewareB, middlewareC,
    function(req, res) {
        // Do stuff
    });

现在我假设(我认为错误)将首先调用中间件然后它将处理:some_param的参数处理程序,但它似乎是另一种方式。 (通过参数处理程序,我的意思是app.param())

我遇到的问题是如果上面的内容是正确的并且首先运行参数处理程序,那么参数处理程序中的一些逻辑会假定用户已经登录并且如果不是则会爆炸,middlewareA处理用户身份验证,如果他们没有登录重定向他们等,所以理想情况下我希望首先调用middlewareA,所以有没有办法实现这种排序?

我能看到这个工作的唯一方法是,如果参数处理程序可以使用中间件但是没有关于此主题的API文档的文档,那么有没有最佳实践来处理这种情况?因为我不想让我的middlewareA逻辑进入我的:some-param处理逻辑,因为我还有许多其他:other-param处理程序等,这也需要这个身份验证(和其他)中间件在他们跑之前跑。

1 个答案:

答案 0 :(得分:1)

是的,param处理程序在中间件之前运行。您可以通过以下方式处理此问题:

  • 将您的param处理程序重新编码为中间件。两种机制之间并没有太大的区别。
  • 或者,在你的param处理程序中,直接运行所需的中间件,如下所示:

function someParam(req, res, next, paramValue) {
  myAuthMiddleware(req, res, function (error, result) {
    if (error) {
      next(error);
      return;
    }
    //Here the user will be logged in
    // do what you need to do with req and paramValue
    next();
  });
}