Lees de documentatie om dit volledig te begrijpen:http://expressjs.com/api.html #router.METHODE
Hoe Express Routes paden vastleggen
Wanneer u een :param
. gebruikt als onderdeel van je pad komt het overeen met alles zoals /*
, en de vastgelegde waarde wordt opgeslagen in req.params.param
.
Als u meer dan één regel heeft, is de eerste geregistreerde de eerste die wordt gecontroleerd. Het controleert elke oproep aan elke regel totdat er een match is gevonden. Als je next()
. aanroept zonder dat er waarden aan worden doorgegeven, zoekt het naar de volgende overeenkomst (hetzij in dezelfde route, hetzij doorgaan naar de volgende middleware).
Deze drie regels worden dus allemaal uitgevoerd
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);
Wanneer ik /user/foobar
vraag , ik zie de volgende uitvoer (en waarschijnlijk een fout als klant omdat ik nooit heb gereageerd :P)
/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar
Het raakt alle drie, maar de context is voor elk anders.
Padpatronen vastleggen met reguliere expressies
Als u afzonderlijke routes voor id (laten we zeggen alle cijfers) en gebruikersnaam (alle letters) wilt vastleggen, kunt u dit doen:
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'));
Let op de parathese rond mijn capture-groep. Zonder dit, params
is leeg. Het legt automatisch vast met slechts *
in de string omdat het aardige mensen zijn. Ik krijg het volgende als uitvoer wanneer ik de drie verschillende typen tegenkom.
id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1
Dat alles uitgelegd, je stelt jezelf bloot aan een aantal vectoren voor bugs om je systeem te besmetten. Misschien wilt u nadenken over uw URL-patroon.