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', ...);