Per comprendere appieno questo, leggere la documentazione:http://expressjs.com/api.html #router.METODO
Come le rotte Express acquisiscono i percorsi
Quando usi un :param
come parte del tuo percorso, corrisponde a tutto come /*
e il valore acquisito viene archiviato in req.params.param
.
Quando hai più di una regola, la prima registrata è la prima confrontata. Controlla ogni chiamata rispetto a ogni regola fino a quando non viene trovata una corrispondenza. Se chiami next()
senza alcun valore passato, cercherà la corrispondenza successiva (o nello stesso percorso o proseguirà nel middleware successivo).
Quindi queste tre regole verranno eseguite tutte
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);
Quando richiedo /user/foobar
, vedrò il seguente output (e probabilmente un errore come client perché non ho mai risposto :P)
/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar
Toccherà tutti e tre, ma il contesto è diverso per ciascuno.
Come acquisire modelli di percorso con espressioni regolari
Se vuoi acquisire percorsi separati per id (diciamo tutti i numeri) e nome utente (tutte le lettere), puoi farlo:
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'));
Nota la paratesi attorno al mio gruppo di cattura. Senza questo, params
è vuoto. Cattura automaticamente con solo *
nella stringa perché sono brave persone. Otterrò quanto segue per l'output quando eseguo i tre diversi tipi.
id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1
Tutto ciò spiegato, ti stai aprendo ad alcuni vettori per i bug che infestano il tuo sistema. Potresti pensare al tuo pattern URL.