我们正在使用expressJwt库,我希望能够排除以下路由GETapi/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路由被排除。

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

最佳答案

您可以使用

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


[^\/]*否定的字符类匹配除/之外的0个或更多字符,并且^ / $锚确保模式将针对整个字符串进行尝试。

请参见regex demo

细节


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

09-10 11:51
查看更多