NodeJS路由的动态参数

时间:2014-11-01 20:07:57

标签: node.js express

我的路线可以定义为

app.route('/api/*/*/*')

.get(function(req, res){
    var entitya = req.params['0'];
    var entityb = req.params['1'];
    var entity3 = req.params['2'];
})

.post(function(req, res){
    res.send('some stuff here');
});

如果我传递了所有三个参数,但是如果我在没有任何参数的情况下进行后期路线就无法找到它,或者如果我没有完成所有三个参数而进入获取路线,那么它将无法找到网址。

有没有办法可以在路线定义中省略*并使get参数动态化?所以,如果我需要传递3个参数,我可以,或2,甚至5?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以为不同的API网址绑定routers

类似这样的事情

app.use('/api/v1/function1', router1);
app.use('/api/v1/function2', router1);

或者,您可以将正则表达式用作URL名称

app.get( /^\/api\/([a-z0-9]+)\/([a-z0-9]+)$/, function(req,res) {
   req.params[0]; //first match of reges
   req.params[1]; //second match of reges
});

app.post( /^\/api\/([a-z0-9]+)\/([a-z0-9]+)$/, function(req,res) {
   req.params[0]; //first match of reges
   req.params[1]; //second match of reges
});

答案 1 :(得分:0)

您可以在URL中使用变量,并从req.query对象中获取变量。 例如:

URL

  

/ api / endpoint?entitya = a&entityb = ab&entity3 = 123

路线

app.route('/api/endpoint');

然后从req.query中获取它们。

由于任何原因都必须使用参数,这是一种简单的方法

路线是

app.route('/api/*')

和一个获取所有动态参数的数组

const entity = req.params['0'] ? req.params['0'].split('/') : [];