我们正在使用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
路由被排除。我使用正则表达式的方式有些问题,但是我很难看到它。我是否需要将
(.)
更改为不完全匹配?我想它可能与斜杠匹配 最佳答案
您可以使用
/^\/api\/items\/([^\/]*)$/
[^\/]*
否定的字符类匹配除/
之外的0个或更多字符,并且^
/ $
锚确保模式将针对整个字符串进行尝试。请参见regex demo。
细节
^
-字符串锚点的开始\/api\/items\/
-匹配文字/api/items/
子字符串([^\/]*)
-捕获组1:/
以外的任何0+个字符。$
-字符串锚点的结尾。请注意,如果要确保
[^\/]*
之后没有/
,请在字符串锚的末尾添加$
末尾。