node expressJwt,除非指定id route

时间:2017-08-23 14:40:45

标签: node.js regex express express-jwt

我们正在使用expressJwt库,我希望能够为以下路由GET排除api/items/:id,但不包括任何看起来像api/items/:id/special-action的路由。

到目前为止,我只能排除所有拥有:id的路线。

以下是我们排除GET:id路线的方法。

this.app.use(expressJwt({ secret: secrets.JWT }).unless({
  path: [
    ...
    { url: /\/api\/items\/(.)/, methods: ['GET'] },
    ...
  ]
});

我已尝试过{ url: /\/api\/items\/(.)\//, methods: ['GET'] }但它与任何路线都不匹配,因此不会排除:id的路线。

我使用正则表达式的方式还有一些问题,但我很难看到它。我是否需要将(.)更改为不匹配全部?我想它可能与尾随斜杠相匹配

1 个答案:

答案 0 :(得分:1)

您可以使用

/^\/api\/items\/([^\/]*)$/

[^\/]*否定字符类匹配除/以外的0个或多个字符,^ / $个锚点确保将针对整个字符串尝试该模式。

请参阅regex demo

<强>详情

  • ^ - 字符串锚的开始
  • \/api\/items\/ - 匹配文字/api/items/子字符串
  • ([^\/]*) - 捕获第1组:除/以外的任何0 +字符。
  • $ - 字符串锚定结束。 请注意,如果您想确保[^\/]*之后没有/,请在结尾处添加$字符串锚定结束。