javascript - Using Express' route paths to match `/` and `/index` -
i'm using express , want match / , /index same route. if write
app.route('/(index)?') node throws error:
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 @ new regexp (native) @ pathtoregexp (c:\myproject\node_modules\express\node_modules\path-to-regexp\index.js:69:10) @ new layer (c:\myproject\node_modules\express\lib\router\layer.js:32:17) @ function.proto.route (c:\myproject\node_modules\express\lib\router\index.js:482:15) @ eventemitter.app.route (c:\myproject\node_modules\express\lib\application.js:252:23) @ c:\myproject\server.js:28:19 @ array.foreach (native) @ object.<anonymous> (c:\myproject\server.js:27:18) @ module._compile (module.js:460:26) @ object.module._extensions..js (module.js:478:10) note if use
app.route('/foo(bar)?') it works fine...
the question mark optional route parameters, not optional route segments. example:
app.route('/:myvar?'); with app.route('/(index)?'); matching routes literally "http://myapp.com/(index)".
you want regular expression route.
app.route(/^\/(index)?$/); ^- matches beginning of line, whole expression must match beginning.\/- escaped forward slash, express route handlers start with.(index)?- works expect because it's regular expression. contents of parenthesis optional because of question mark.$- matches end of line, whole expression must match way end.
if omit ^ , $ regular expression engine try match expression against substrings of route bit more expensive checking if entire url string matches, , lead route matches didn't expect. @robertkelp suggestion.
Comments
Post a Comment