[英]add middleware to all routes but a few
如何将中间件添加到所有可能的路由中,除了那些匹配给定表达式的路由?
我知道如何向匹配表达式的中间件添加中间件:
app.all('/test/*', requireLogin);
但我想要求所有路径中的登录名,除了一些路径中具有特定前缀的登录名。
如果您使用的是Express 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
});
希望这能解释。
我能够做到这一点的唯一方法是在中间件本身中使用guard子句为它明确地编写代码。 因此,总是调用中间件,它req.path
根据旁路正则表达式检查req.path
,如果是,则立即调用next()
并返回。 这是诸如expressjs body-parser (通过type-is模块)之类的东西用来基于检查给定请求不需要执行任何操作来自己不操作的模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.