节点 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 的路由。

以下是我们如何实现排除具有:idGET 路由。

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 路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 找不到路由,除非路由被命名

除非函数,否则如何模拟 Express JWT?

节点的 Sequelize 不允许在主键上自动生成 UUID *除非*字段名称是 'id'

类型错误:expressJwt 不是函数

如果需要身份验证,请指定每个节点路由

ES工作原理