节点 expressJwt 除非指定 id 路由
node expressJwt unless specify id route
我们正在使用 expressJwt 库,我希望能够排除以下路线 api/items/:id
的 GET
但不包括任何看起来像 api/items/:id/special-action
的路线。
到目前为止,我只能排除所有具有 :id
的路由。
以下是我们如何排除具有 :id
的 GET
路线。
this.app.use(expressJwt({ secret: secrets.JWT }).unless({
path: [
...
{ url: /\/api\/items\/(.)/, methods: ['GET'] },
...
]
});
我试过 { url: /\/api\/items\/(.)\//, methods: ['GET'] }
但它与任何路由都不匹配,因此没有包含 :id
的路由被排除在外。
我使用正则表达式的方式有些不对劲,但我很难看清它。我是否需要将 (.)
更改为不完全匹配?我想它可能与尾部斜线匹配
您可以使用
/^\/api\/items\/([^\/]*)$/
[^\/]*
否定字符 class 匹配除 /
之外的 0 个或多个字符,并且 ^
/ $
锚点确保模式将是尝试对整个字符串。
参见regex demo。
详情
^
- 字符串锚点的开始
\/api\/items\/
- 匹配文字 /api/items/
子串
([^\/]*)
- 捕获第 1 组:除 /
. 以外的任何 0+ 个字符
$
- 字符串锚点的结尾。
请注意,如果您想确保 [^\/]*
之后没有 /
,请在末尾添加一个 $
字符串锚点结尾。
我们正在使用 expressJwt 库,我希望能够排除以下路线 api/items/:id
的 GET
但不包括任何看起来像 api/items/:id/special-action
的路线。
到目前为止,我只能排除所有具有 :id
的路由。
以下是我们如何排除具有 :id
的 GET
路线。
this.app.use(expressJwt({ secret: secrets.JWT }).unless({
path: [
...
{ url: /\/api\/items\/(.)/, methods: ['GET'] },
...
]
});
我试过 { url: /\/api\/items\/(.)\//, methods: ['GET'] }
但它与任何路由都不匹配,因此没有包含 :id
的路由被排除在外。
我使用正则表达式的方式有些不对劲,但我很难看清它。我是否需要将 (.)
更改为不完全匹配?我想它可能与尾部斜线匹配
您可以使用
/^\/api\/items\/([^\/]*)$/
[^\/]*
否定字符 class 匹配除 /
之外的 0 个或多个字符,并且 ^
/ $
锚点确保模式将是尝试对整个字符串。
参见regex demo。
详情
^
- 字符串锚点的开始\/api\/items\/
- 匹配文字/api/items/
子串([^\/]*)
- 捕获第 1 组:除/
. 以外的任何 0+ 个字符
$
- 字符串锚点的结尾。 请注意,如果您想确保[^\/]*
之后没有/
,请在末尾添加一个$
字符串锚点结尾。