如何创建一个 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 不同)。
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 不同)。