首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速路由匹配额外的URL令牌

快速路由匹配额外的URL令牌
EN

Stack Overflow用户
提问于 2018-12-07 03:58:10
回答 1查看 368关注 0票数 0

我想要得到的形式(严格地) /forumId/slug/的URL与快递‘router.get()。附加的令牌应该会导致404。

我想出了一个路径路由:/:forumId([^?\/]{0,}):parameters1?/:slug([^?\/]{0,})?:parameters2?,根据express-route-tester,它的行为与预期的一样。

然而,Express似乎也在捕捉鼻涕虫之后带有额外标记的路径。直接传递Javascript正则表达式而不是字符串具有相同的效果。

下面是我使用的正则表达式:/^\/(\d+)(?:\?[^\?\/]{0,})?(?:$|\/([^\?\/]{0,})(?:\?[^\?\/]{0,})?\/?$)/

应该匹配的字符串示例(这些工作):

代码语言:javascript
复制
/7721
/7721/
/7721?page=2
/7721/ForumTitle/
/7721/AnotherForumTitle?test/
/7721/YetAnotherForumTitle?page=2
/7721?page=3/ForumTitle?page=2
/7721?page=3/ForumTitle?page=2/

不应该匹配的字符串示例:

代码语言:javascript
复制
/7721?page=3/ForumTitle?page=2/threadId

Express使用path-to-regexp解析字符串,根据docs (https://www.npmjs.com/package/path-to-regexp#user-content-usage),默认情况下“end”选项设置为true,这似乎证实了匹配应该在弹格之后立即停止。

我遗漏了什么?

速递的版本是4.16.4。

更新:删除regex中有关查询参数(?page=2)的部分解决了问题。为什么是这样?我的regex是有缺陷的(我试着找出可能的贪婪匹配,但找不到),还是这是path-to-regexp的期望

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-07 17:56:05

正如在快递路由文档中所解释的,

查询字符串不是路由路径的一部分。

(https://expressjs.com/en/guide/routing.html#route-paths)。

因此,试图在/^\/(\d+)(?:\?[^\?\/]{0,})?(?:$|\/([^\?\/]{0,})(?:\?[^\?\/]{0,})?\/?$)/中捕获查询参数的部分没有必要,从而导致了简化的/^\/(\d{1,})(?:$|\/([^\/]{0,})\/?$)/

  • ^\/:端点的开头加上斜杠'/‘
  • (\d{1,}):由数字组成的论坛标识符
  • (?:$|\/([^\/]{0,})\/?$)/:要么结束于此,要么捕获一个可选的段塞

此正则表达式匹配每个提供的示例,但也捕获了/7721/ForumTitle?page=2/test,这将导致404。经过进一步研究,我注意到'/test‘被捕获为req.query ({"page": "2/test"})中查询参数的一部分。

这很奇怪,因为斜杠'/‘应该是用于划界的保留字符(GET参数中允许的字符)。更多的资料将是有帮助的。

编辑:引用Douglas (来自那里),Express.js uses Node.js core to parse the paths according to the url spec。‘s的URL模块遵循WHATWG URL标准

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53663028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档