如何创建一个 Express 路由来处理类似这样的 URL?

How can I create an Express route that handles URLs that look like this?

app.get('/:service[SOMETHING GOES HERE]', function(req, res, next){
    console.log('Service is:', req.params.service);
});

这需要捕获类似于以下任何一种的 URL:

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

回调与 foo 之后的任何内容无关,但理想情况下应该能够将 foo 作为名为 service 的参数访问,而无需手动解析路径。

我一直在使用 this 进行测试,但仍然没有找到任何可以做到这一点的东西。目前最接近的是 /:service*.

编辑:不,它不是答案为 /:service/* 的副本,因为那不包括 /foo.

您可以为此使用 app.use() 函数。阅读有关路径处理的文档以获取更多信息。修改后的代码将是:

app.use('/foo', function(req, res, next){
    console.log('Service is:', req.params.service);
});

缺点是您不会将 foo 恢复为服务参数。

在实际的 Express 路线中使用 /:service* 完全符合您的要求:

/foo           maps to { '0': '', service: 'foo' }
/foo/bar       maps to { '0': '/bar', service: 'foo' }
/foo/bar/blah  maps to { '0': '/bar/blah', service: 'foo' }

出于某种原因,Express Route Tester 对这些 URL 的这些类型的模式进行了不同的映射(它的配置可能与 Express 不同)。