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

时间:2013-05-16 00:59:16

标签: node.js routing express

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


我想匹配以下路径:

/foo
/foo/bar
/foo/bar/baz

这些也应该有效:

/foo/          ->  /foo
/foo/bar/      ->  /foo/bar
/foo/bar/baz/  ->  /foo/bar/baz

我尝试了以下内容:

app.get('/foo/*', ...);

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

5 个答案:

答案 0 :(得分:6)

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

app.get('/foo(/bar(/baz)?)?', ...)

最后允许选择/的默认Express行为适用。

编辑:这个怎么样?

app.get('/foo/:dummy?*', ...)

答案 1 :(得分:6)

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

app.get(/^[/]foo(?=$|[/])/, ...);

答案 2 :(得分:2)

我也有这个问题,我不得不同意正则表达式效果最好,但略有改进:

app.get('/foo([/].*)?', ...);

这将匹配:

/foo
/foo/
/foo/what/ever/you/put/after

考虑/foo/:dummy?*之后,/并未真正采用可选foo,而/foo(/:dummy*)?并未真正正确匹配。

/foo(/:dummy)?*有点可行但会创建一个额外的变量,因为它在单独的变量中同时包含path*,这在这种情况下是不合适的。

所以我个人会坚持使用正则表达式。

答案 3 :(得分:1)

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

app.get(['/foo', '/foo/*'], ...);

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

答案 4 :(得分:0)

不要使用斜线,它应该可以正常工作:

app.get('/foo', ...);