更新:我的问题没有准确地传达我想要实现的目标。我希望匹配/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不适合它。
答案 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', ...);