Express:顶级path的可选尾部斜杠

更新:我的问题没有准确地传达我想要达到的目标。 我希望匹配/foo/foo//foo/ (例如/foo/asdf/jkl )之下的任何东西,而不是特定的path。 原来的问题如下。


我想匹配以下path:

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

这些也应该工作:

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

我尝试了以下内容:

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

虽然这在/foo情况下失败了。 我知道我可以提供一个正则expression式而不是一个string,但这肯定是一个常见的要求,所以我很惊讶的发现模式匹配的DSL不能适应它。

看来,正则expression式是要走的路:

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

如果你想在一个模式中匹配它们:

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

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

编辑:这个怎么样?

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

我也有这个问题,我必须同意,正则expression式运作最好,但略有改善:

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

这将匹配:

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

/foo/:dummy?*并没有考虑/foo(/:dummy*)?之后的可选项/ foo /foo(/:dummy*)? 并不是真正匹配的。

/foo(/:dummy)?*有点作品,但创build了一个额外的variables,因为它有两个path*在单独的variables,在这种情况下是不合适的。

所以我个人坚持正则expression式。

离开斜线,它应该工作得很好:

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