使用通配符将中间件列入白名单

时间:2018-08-09 08:31:42

标签: javascript node.js express middleware

我的应用程序上有一个可以运行的全局中间件,但是现在我想将该中间件中的某些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,结果我的白名单不起作用。我认为这与通配符有关,但我不知道自己在做什么错

1 个答案:

答案 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

希望有帮助