Abyste tomu plně porozuměli, přečtěte si prosím dokumentaci:http://expressjs.com/api.html #router.METOD
Jak expresní trasy zachycují cesty
Když použijete :param
jako součást vaší cesty odpovídá všemu jako /*
a zachycená hodnota je uložena v req.params.param
.
Máte-li více než jedno pravidlo, první zaregistrované je to první, proti kterému se kontroluje. Kontroluje každé volání proti každému pravidlu, dokud není nalezena shoda. Pokud zavoláte next()
pokud mu nebudou předány žádné hodnoty, bude hledat další shodu (buď ve stejné trase, nebo pokračovat do dalšího middlewaru).
Všechna tato tři pravidla tedy budou spuštěna
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);
Když požádám o /user/foobar
, uvidím následující výstup (a pravděpodobně chyba jako klienta, protože jsem nikdy neodpověděl :P)
/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar
Zasáhne všechny tři, ale kontext je u každého jiný.
Jak zachytit vzory cest pomocí regulárních výrazů
Pokud chcete zachytit samostatné cesty pro ID (řekněme všechna čísla) a uživatelské jméno (všechna písmena), můžete to udělat takto:
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'));
Všimněte si paratézy kolem mé zajatecké skupiny. Bez tohoto params
je prázdný. Automaticky snímá pouze pomocí *
v řetězci, protože jsou to milí lidé. Když poběžím proti třem různým typům, dostanu následující pro výstup.
id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1
To vše vysvětlilo, že se otevíráte některým vektorům pro chyby, které zamoří váš systém. Možná budete chtít přemýšlet o vzoru adresy URL.