如何创建处理看起来像这样的URL的Express路由?

时间:2016-06-24 19:25:30

标签: regex node.js express url-routing

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

2 个答案:

答案 0 :(得分:1)

在实际的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会针对这些类型的模式(这可能与Express的配置不同)对这些URL进行不同的映射。

答案 1 :(得分:0)

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

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

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