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

有没有办法在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); }); }); 

你当然可以为一个特定的模式设置多个中间件,但是由你决定何时跳过一个中间件( 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); }); }); 

如果ID是一个数字,你可以使用正则expression式来匹配数字:

 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