节点表示 JWT,除非指定 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路由。

我使用正则表达式的方式有些不对劲,但我很难看到它。 我是否需要更改(.)以不完全匹配? 我想它可能与尾随斜杠匹配

您可以使用

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

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

请参阅正则表达式演示。

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

最新更新