节点expressJwt除非指定id路由
我们正在使用expressJwt库,我希望能够排除以下路由api/items/:id
的GET
,但不包括任何看起来像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锚点的$
结尾。