2015-04-23 4 views
1

Есть ли способ различать параметры запроса в том же положении в 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); 
    }); 
}); 

ответ

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); 
    }); 
}); 
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

Смежные вопросы