节点 expressJwt 除非指定 id 路由
Posted
技术标签:
【中文标题】节点 expressJwt 除非指定 id 路由【英文标题】:node expressJwt unless specify id route 【发布时间】:2018-02-01 05:27:51 【问题描述】:我们正在使用 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
的路由被排除在外。
我使用正则表达式的方式有些问题,但我很难看到它。我是否需要将(.)
更改为不匹配?我想它可能与斜杠匹配
【问题讨论】:
效果很好。谢谢! 没看到,mb 【参考方案1】:你可以使用
/^\/api\/items\/([^\/]*)$/
[^\/]*
否定字符类匹配除 /
之外的 0 个或多个字符,^
/ $
锚确保将针对整个字符串尝试该模式。
请参阅regex demo。
详情
^
- 字符串锚的开始
\/api\/items\/
- 匹配文字 /api/items/
子字符串
([^\/]*)
- 捕获组 1:除 /
之外的任何 0+ 个字符。
$
- 字符串锚的结尾。
请注意,如果您想确保 [^\/]*
后面没有 /
,请在末尾添加一个 $
字符串锚。
【讨论】:
我很抱歉,我过早地谈到了这项工作。我认为我看到的下一个问题是不同的。看来 express jwt 仍然匹配所有内容。/api/items/:id/special-action
仍然没有通过 expressjwt 运行
尝试添加锚点。 /^\/api\/items\/([^\/]*)$/
*叹息...我以为我已经做到了哈哈。现在可以了。谢谢以上是关于节点 expressJwt 除非指定 id 路由的主要内容,如果未能解决你的问题,请参考以下文章