在同一位置区分请求参数?

时间:2015-04-23 18:17:28

标签: node.js express parameters httprequest

有没有办法区分expressjs中相同位置的请求参数? 例如,有没有办法:

router.get('/pages/:id', function(req,res){
  var id=req.params.id;
  api.getPagebyID(id, function(err,pageData){
      if (err) console.log(err);
      console.log(pageData);
  });
});

并拥有:

router.get('/pages/:name', function(req,res){
  var name=req.params.name;
  api.getPagebyName(name, function(err,pageData){
      if (err) console.log(err);
      console.log(pageData);
  });
});

2 个答案:

答案 0 :(得分:3)

您当然可以为特定模式设置多个中间件,但您可以自行决定何时跳过中间件(使用next)。发送响应后,不再执行其他中间件。

router.get('/pages/:id', function(req, res, next){
  var id=req.params.id;
  api.getPagebyID(id, function(err,pageData){
    console.log(pageData);
    if (err){
      console.log(err);
      if(err.error === 'not_found'){
        // No id. Try name:
        next();
      } else {
        // Actual error:
        res.status(500).send();
      }
    }
  });
});

router.get('/pages/:name', function(req,res){
  var name=req.params.name;
  api.getPagebyName(name, function(err,pageData){
      if (err) console.log(err);
      console.log(pageData);
  });
});

答案 1 :(得分:2)

如果ID是数字,则可以使用正则表达式仅匹配数字:

router.get('/user/:id([0-9]+)', function(req, res){
  res.send('user ' + req.params.id);
});

router.get('/range/:range(\\w+\.\.\\w+)', function(req, res){
  var range = req.params.range.split('..');
  res.send('from ' + range[0] + ' to ' + range[1]);
});

点击此处的文档:http://expressjs.com/4x/api.html#router.param