如何将中间件添加到除可匹配给定表达式的所有可能路由之外?
我知道如何将中间件添加到与表达式匹配的中间件:
app.all('/test/*', requireLogin);
但是我想要在所有路由中登录,除了少数路径中有特定前缀的路由。
答案 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模块)之类的事情所使用的模式,基于检查给定请求不要求它们执行任何操作而无操作。