节点expressJwt除非指定id路由

我们正在使用expressJwt库,我希望能够排除以下路由api/items/:idGET ,但不包括任何看起来像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被排除。

我正在使用正则expression式的方式,但我很难看到它。 我是否需要将(.)改为不匹配? 我想它可能是匹配的尾部斜线

你可以使用

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

[^\/]*取反的字符类匹配除了/以外的0个或更多的字符, ^ / $锚确保模式将针对整个string进行尝试。

查看正则expression式演示 。

细节

  • ^ – string锚的开始
  • \/api\/items\/ – 匹配一个文字/api/items/ substring
  • ([^\/]*) – 捕获组1:除/以外的任何0+字符。
  • $ – string锚的结尾。 请注意,如果您想确保[^\/]*没有/之后,在末尾添加string锚点的$结尾。