首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Express‘路由路径匹配`/`和`/索引’

使用Express‘路由路径匹配`/`和`/索引’
EN

Stack Overflow用户
提问于 2015-06-18 18:09:19
回答 1查看 3.1K关注 0票数 3

我使用的是Express,我想将//index匹配到同一条路线。但如果我写

代码语言:javascript
复制
app.route('/(index)?')

节点抛出此错误:

代码语言:javascript
复制
c:\myproject\node_modules\express\node_modules\path-to-regexp\index.js:69
  return new RegExp(path, flags);
         ^
SyntaxError: Invalid regular expression: /^\/(?(?:([^\/]+?)))?e\/?$/: Invalid group
    at new RegExp (native)
    at pathtoRegexp (c:\myproject\node_modules\express\node_modules\path-to-regexp\index.js:69:10)
    at new Layer (c:\myproject\node_modules\express\lib\router\layer.js:32:17)
    at Function.proto.route (c:\myproject\node_modules\express\lib\router\index.js:482:15)
    at EventEmitter.app.route (c:\myproject\node_modules\express\lib\application.js:252:23)
    at c:\myproject\server.js:28:19
    at Array.forEach (native)
    at Object.<anonymous> (c:\myproject\server.js:27:18)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)

注意如果我用

代码语言:javascript
复制
app.route('/foo(bar)?')

效果不错..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-18 18:12:12

问号用于可选路由参数,而不是可选路由段。例如:

代码语言:javascript
复制
app.route('/:myVar?');

使用app.route('/(index)?');,您将匹配字面上是"http://myapp.com/(index)"的路由。

你想要一个正则表达式路径。

代码语言:javascript
复制
app.route(/^\/(index)?$/);
  • ^ -匹配一行的开头,所以整个表达式必须从一开始就匹配。
  • \/ -是一个转义的正斜杠,所有快速路由处理程序通常都从它开始。
  • (index)? --因为它是一个正则表达式,所以现在可以像您期望的那样工作。由于问号,括号的内容是可选的。
  • $ -匹配一行的末尾,因此整个表达式必须一直匹配到末尾。

如果省略了^$,那么正则表达式引擎将尝试将表达式与路由的子字符串匹配,这比检查整个url字符串是否匹配要昂贵一些,而且它可能导致路由匹配,而这并不一定是您所期望的。感谢@robertkelp的建议。

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

https://stackoverflow.com/questions/30922680

复制
相关文章

相似问题

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