Javascript 带有通配符的中间件白名单

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(

我的应用程序中有一个全局中间件可以工作,但现在我想将该中间件中的一些URL列入白名单

我想要列入白名单的URL如下所示
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
参考:

希望能有帮助