快递中可变数量的路线参数?

时间:2017-08-04 07:15:37

标签: javascript node.js rest express ecmascript-6

cex.io's RESTful API有一条有趣的路线,其中可变数量的参数返回给定的所有货币对。

如何在快递中实现这一目标?

这是我的意思的伪代码类型示例......

app.get('/pairs/:arg1/:arg2/:argn...', function(req, res, next) {
    // app logic
});

3 个答案:

答案 0 :(得分:4)

在Express中你可以在你的路线中使用*之类的通配符,它​​也支持你可以使用的正则表达式,这里有一个如何实现这个的例子

app.get('/pairs/*', function(req, res) {
   console.log(req.params[0]); 
});

// GET /pairs/testing/this/route
// Output: testing/this/route

获得params之后,您可以在/上拆分,这将为您提供传递给路线的所有参数的数组。

有关快速路由的详细信息,请查看this page

答案 1 :(得分:2)

作为手动拆分参数的替代方法(这可能是最佳解决方案),您还可以定义一个允许的最大参数数量的路由,每个参数都是可选的:

app.get('/pairs/:arg1?/:arg2?/:arg3?/:arg4?', ...)

(最多允许4个参数)

结果将是:

/pairs/USD
{ arg1: 'USD', arg2: undefined, arg3: undefined, arg4: undefined }

/pairs/USD/EUR
{ arg1: 'USD', arg2: 'EUR', arg3: undefined, arg4: undefined }

/pairs/USD/EUR/RUB
{ arg1: 'USD', arg2: 'EUR', arg3: 'RUB', arg4: undefined }

/pairs/USD/EUR/RUB/BTC
{ arg1: 'USD', arg2: 'EUR', arg3: 'RUB', arg4: 'BTC' }

答案 2 :(得分:0)

您可以使用Regex处理您可以访问的所有此类请求ExpressJs Documentation以获取更多详细信息

app.get('/pairs/*', function(req, res, next) {
    // app logic
});