我使用的是Express,我想将/和/index匹配到同一条路线。但如果我写
app.route('/(index)?')节点抛出此错误:
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)注意如果我用
app.route('/foo(bar)?')效果不错..。
发布于 2015-06-18 18:12:12
问号用于可选路由参数,而不是可选路由段。例如:
app.route('/:myVar?');使用app.route('/(index)?');,您将匹配字面上是"http://myapp.com/(index)"的路由。
你想要一个正则表达式路径。
app.route(/^\/(index)?$/);^ -匹配一行的开头,所以整个表达式必须从一开始就匹配。\/ -是一个转义的正斜杠,所有快速路由处理程序通常都从它开始。(index)? --因为它是一个正则表达式,所以现在可以像您期望的那样工作。由于问号,括号的内容是可选的。$ -匹配一行的末尾,因此整个表达式必须一直匹配到末尾。如果省略了^和$,那么正则表达式引擎将尝试将表达式与路由的子字符串匹配,这比检查整个url字符串是否匹配要昂贵一些,而且它可能导致路由匹配,而这并不一定是您所期望的。感谢@robertkelp的建议。
https://stackoverflow.com/questions/30922680
复制相似问题