Um dies vollständig zu verstehen, lesen Sie bitte die Dokumentation:http://expressjs.com/api.html #router.METHODE
So erfassen Expressrouten Pfade
Wenn Sie einen :param
verwenden als Teil Ihres Pfads passt es auf alles wie /*
, und der erfasste Wert wird in req.params.param
gespeichert .
Wenn Sie mehr als eine Regel haben, wird die zuerst registrierte zuerst geprüft. Es überprüft jeden Aufruf anhand jeder Regel, bis eine Übereinstimmung gefunden wird. Wenn Sie next()
aufrufen Wenn ihm keine Werte übergeben werden, sucht es nach der nächsten Übereinstimmung (entweder auf derselben Route oder weiter in die nächste Middleware).
Diese drei Regeln werden also alle ausgeführt
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);
Wenn ich /user/foobar
anfordere , sehe ich die folgende Ausgabe (und wahrscheinlich einen Fehler als Client, weil ich nie geantwortet habe :P)
/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar
Es wird alle drei treffen, aber der Kontext ist für jeden anders.
Erfassen von Pfadmustern mit regulären Ausdrücken
Wenn Sie separate Routen für die ID (sagen wir alle Zahlen) und den Benutzernamen (alle Buchstaben) erfassen möchten, können Sie dies tun:
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'));
Beachten Sie die Parathese um meine Fanggruppe. Ohne dies params
ist leer. Es erfasst automatisch mit nur *
in der Schnur, weil sie nette Leute sind. Ich erhalte Folgendes als Ausgabe, wenn ich gegen die drei verschiedenen Typen laufe.
id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1
All dies erklärt, Sie öffnen sich für einige Vektoren für Fehler, die Ihr System befallen. Vielleicht möchten Sie über Ihr URL-Muster nachdenken.