有没有办法区分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);
});
});
答案 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]);
});