Javascript 带有通配符的中间件白名单
我的应用程序中有一个全局中间件可以工作,但现在我想将该中间件中的一些URL列入白名单 我想要列入白名单的URL如下所示Javascript 带有通配符的中间件白名单,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,我的应用程序中有一个全局中间件可以工作,但现在我想将该中间件中的一些URL列入白名单 我想要列入白名单的URL如下所示api/invitation/RANDOMSTRING。所以我想用一个通配符 我编写了这个函数,第一部分是我的白名单逻辑 中间件: app.use(function(req, res, next) { if (['/api/invitation', '/api/invitation/*'].indexOf(req.url) !== -1) { return next(
api/invitation/RANDOMSTRING
。所以我想用一个通配符
我编写了这个函数,第一部分是我的白名单逻辑
中间件:
app.use(function(req, res, next) {
if (['/api/invitation', '/api/invitation/*'].indexOf(req.url) !== -1) {
return next();
} else {
DO STUFF...
}
});
然而,我的问题是我的白名单逻辑
白名单:
if (['/api/invitation', '/api/invitation/*'].indexOf(req.url) !== -1) {
return next();
总是返回false,因此我的白名单不起作用。我假设它与通配符有关,但我不知道我做错了什么您不能使用
indexOf
来匹配/api/invitation/*
,如果您的req.url
完全匹配/api/invitation/*
,它将返回true,例如:
['/api/invitation/*'].indexOf('/api/invitation/*') > -1; // true
['/api/invitation/*'].indexOf('/api/invitation/something') > -1; // false
您可以按如下方式使用正则表达式:
if (/api\/invitation\/.*/.test(req.url)) {
next();
}
对于测试:
/api\/invitation\/.*/.test('api/invitation/hehe'); // true
/api\/invitation\/.*/.test('api/invitation/1'); // true
/api\/invitation\/.*/.test('api/customer/hehe'); // false
参考:
希望能有帮助