Express 中间件和参数处理路由顺序

Express middleware and parameter handling ordering on route

所以我正在 运行 进行一些 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 处理程序等,它们也需要这个身份验证(和其他)中间件运行 在他们 运行.

之前

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

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

.

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