För att helt förstå detta, läs dokumentationen:http://expressjs.com/api.html #router.METOD
Hur expressrutter fångar upp sökvägar
När du använder en :param
som en del av din väg matchar den allt som /*
, och det fångade värdet lagras i req.params.param
.
När du har mer än en regel är den första registrerade den första som kontrolleras mot. Den kontrollerar varje samtal mot varje regel tills en matchning hittas. Om du anropar next()
utan att några värden skickas till den kommer den att leta efter nästa matchning (antingen på samma rutt eller fortsätta till nästa mellanprogram).
Så dessa tre regler kommer alla att köras
var handleRoute = function(req, res, next){
console.log(req.path + ' ' + req.params.id + ' ' + req.params.user + ' ' + req.params[0]);
next();
}
route.route('/user/:id').get(handleRoute);
route.route('/user/:user').get(handleRoute);
route.route('/user/*').get(handleRoute);
När jag begär /user/foobar
, jag ser följande utdata (och förmodligen ett fel som klient eftersom jag aldrig svarade :P)
/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar
Det kommer att träffa alla tre, men sammanhanget är olika för var och en.
Hur man fångar sökvägsmönster med reguljära uttryck
Om du vill fånga separata rutter för id (låt oss säga alla siffror) och användarnamn (alla bokstäver), kan du göra så här:
var handleRoute = function(tag) {
return function(req, res, next) {
console.log(tag + ' ' + req.path + ' -> ' + req.params[0]);
res.status(200)
.json({
success: 'yay!'
});
};
};
route.route(/^\/user\/([0-9]+)$/i)
.get(handleRoute('id'));
route.route(/^\user\/([A-Za-z]+)$/i)
.get(handleRoute('user'));
route.route('/user/*')
.get(handleRoute('catch all'));
Notera paratesen kring min fångstgrupp. Utan detta, params
är tom. Den fångar automatiskt med bara *
i strängen för att de är trevliga människor. Jag får följande för utdata när jag kör mot de tre olika typerna.
id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1
Allt som förklaras, du öppnar dig för några vektorer för buggar som kan angripa ditt system. Kanske vill tänka på ditt webbadressmönster.