如何跳过Express js中堆栈中的部分中间件

时间:2015-04-09 05:52:30

标签: node.js express middleware

我正在开发Web应用程序的后端。我已经为每个请求执行了一堆中间件 - [logging(before),authentication,Etag(Before),Nonce,httpRequest,Etag(after),logging(after)]。现在我的问题是,在处理每个请求时,当请求应该跳过其余的中间件并且只是进行日志记录时,会发生一些特殊情况。 我可以通过转储方式执行此操作,只需使所有中间件检查是否已发生某些情况,如果为true则只调用next(),否则使用中间件处理请求。但我想知道是否有一种聪明的方法可以做到这一点?

以下是我目前用于配置要执行的中间件顺序的代码片段:

async.series(operations, function(err) {
        if(err) {
            console.log('Something blew up!!!!!!');
            return next(err);
        }
        console.log('middleware get executed');
        // no errors so pass control back to express
        next();
    });

"操作"变量是我需要按顺序执行的中间件列表。我需要使用async.series()因为我需要使中间件可配置的顺序。 是否有一个聪明的我可以保持中间件的顺序可配置并满足我的要求,如上所述?

修改

我需要跳过其余中间件的示例是,当身份验证失败并将statusCode写入" 401未授权",然后为中间件堆栈[记录(之前),身份验证,Etag(之前),Nonce,httpRequest,Etag(之后),日志记录(之后)],我将从身份验证跳转到日志记录(之后)。然后那将是请求的结束。

1 个答案:

答案 0 :(得分:1)

我试图理解你的关注

我正在根据需要提供一个代码段来执行中间件功能。

async.each(operations, function(operation, callback) {
   if(operation) {
       // if operation is required execute here

       callback();
   } else {
       // otherwise skip just to call callback() here
       callback();
   }



}, function(err){
    if( err ) {
      console.log(err);
    } else {
      next();
    }
});

数组中的所有操作并逐个执行异步提供.each

不必强制调用每个操作。您只需在其他情况下通过调用callback()跳过。我想说在if子句中你可以放置你的强制执行条件。

由于