将中间件添加到所有路由,但少数

时间:2014-05-13 03:57:19

标签: node.js express

如何将中间件添加到除可匹配给定表达式的所有可能路由之外?

我知道如何将中间件添加到与表达式匹配的中间件:

app.all('/test/*', requireLogin);

但是我想要在所有路由中登录,除了少数路径中有特定前缀的路由。

2 个答案:

答案 0 :(得分:1)

如果您使用快递3.x系列,那么您在这里运气不佳。你需要破解中间件以检查路径。

app.use(function(err, req, res, next){
   if(canRouteSkipLogin(req.path)
        next();
   else{
       //Do the auth logic 
   }

});

canRouteSkipLogin = function(path){
 //logic to find the path which can skip login
}

在Express 4.0中,您可以更轻松地完成这项工作。

 var authRoutes = express.Router();
 var nonAuthRoutes = express.Router();

authRoutes.use(function(req, res, next) {
    //Do Auth Logic here
});

希望这能解释。

答案 1 :(得分:0)

我能够做到这一点的唯一方法就是在中间件本身中使用guard子句显式编写代码。所以中间件总是被调用,它会针对旁路正则表达式检查req.path,如果是,则立即调用next()并返回。这是expressjs body-parser(通过type-is模块)之类的事情所使用的模式,基于检查给定请求不要求它们执行任何操作而无操作。