我的应用程序上有一个可以运行的全局中间件,但是现在我想将该中间件中的某些URL列入白名单。
我要白名单的URL看起来像这样api/invitation/RANDOMSTRING
。所以我当时在考虑使用通配符。
我编写了此函数,第一部分是我的白名单逻辑。
MIDDLEWARE :
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,结果我的白名单不起作用。我认为这与通配符有关,但我不知道自己在做什么错
答案 0 :(得分:0)
您不能使用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
参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
希望有帮助