Express:顶级路径的可选尾部斜杠

dav*_*ers 9 routing node.js express

更新:我的问题没有准确地传达我想要实现的目标.我希望匹配/foo,/foo/以及/foo/(例如/foo/asdf/jkl)下的任何内容,而不是具体的给定路径.最初的问题如下.


我想匹配以下路径:

/foo
/foo/bar
/foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

这些也应该有用:

/foo/          ->  /foo
/foo/bar/      ->  /foo/bar
/foo/bar/baz/  ->  /foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

app.get('/foo/*', ...);
Run Code Online (Sandbox Code Playgroud)

但是,这种情况失败了/foo.我知道我可以提供正则表达式而不是字符串,但这肯定是一个常见的要求,所以我会惊讶地发现模式匹配的DSL不适应它.

rob*_*lep 6

如果您想以一种模式匹配它们:

app.get('/foo(/bar(/baz)?)?', ...)
Run Code Online (Sandbox Code Playgroud)

/适用于最后允许可选项的默认Express行为.

编辑:怎么样?

app.get('/foo/:dummy?*', ...)
Run Code Online (Sandbox Code Playgroud)


dav*_*ers 6

看来正则表达式是要走的路:

app.get(/^[/]foo(?=$|[/])/, ...);
Run Code Online (Sandbox Code Playgroud)


小智 6

我知道这是一个老问题,但我遇到了同样的问题,我想出了这个:

app.get(['/foo', '/foo/*'], ...);
Run Code Online (Sandbox Code Playgroud)

这将匹配/foo、/foo/和 下的任何内容/foo/...。我认为这是一个比正则表达式更具可读性的解决方案,它清楚地传达了意图。