Heim > Artikel > Web-Frontend > Detaillierte Erläuterung der Express-Routing_Javascript-Fähigkeiten
Routenführung
Routing bezieht sich auf die Definition der Endpunkte (URIs) der Anwendung und die Reaktion auf Clientanfragen.
Routing besteht aus einem URI, einer HTTP-Anfrage (GET, POST usw.) und mehreren Handles. Seine Struktur ist wie folgt: app.METHOD(path, [callback...], callback), app ist ein Express Objekt Beispiel: METHOD ist eine HTTP-Anforderungsmethode, Pfad ist der Pfad auf dem Server und Rückruf ist die Funktion, die ausgeführt werden soll, wenn die Route übereinstimmt.
Hier ist ein einfaches Routing-Beispiel:
var express = require('express'); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get('/', function(req, res) { res.send('hello world'); });
Routing-Methode
Die Routing-Methode stammt von der HTTP-Anforderungsmethode und ist der Express-Instanz zugeordnet.
Das folgende Beispiel zeigt GET- und POST-Anfragen, die für die Anwendung und den Pfad definiert sind:
// GET method route app.get('/', function (req, res) { res.send('GET request to the homepage'); }); // POST method route app.post('/', function (req, res) { res.send('POST request to the homepage'); });
Express definiert die folgenden Routing-Methoden entsprechend HTTP-Anfragen: get, post, put, head, delete, options, Trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, Zusammenführen, m-suchen, benachrichtigen, abonnieren, abbestellen, patchen, suchen und verbinden.
Einige Routing-Methodennamen sind keine zulässigen JavaScript-Variablennamen. Verwenden Sie in diesem Fall die Klammernotation, zum Beispiel: app['m-search']('/', function ...
app.all() ist eine spezielle Routing-Methode, die keiner HTTP-Methode entspricht. Ihre Funktion besteht darin, Middleware für alle Anfragen auf einem Pfad zu laden.
Im folgenden Beispiel wird das Handle für Anfragen von „/secret“ ausgeführt, unabhängig davon, ob sie GET, POST, PUT, DELETE oder eine andere vom http-Modul unterstützte HTTP-Anfrage verwenden.
app.all('/secret', function (req, res, next) { console.log('Accessing the secret section ...'); next(); // pass control to the next handler });
Routing-Pfad
Der Routing-Pfad und die Anfragemethode definieren zusammen den Endpunkt der Anfrage, der eine Zeichenfolge, ein Zeichenfolgenmuster oder ein regulärer Ausdruck sein kann.
Express verwendet Path-to-Regexp, um Routing-Pfade abzugleichen. Informationen zu allen Methoden zum Definieren von Routing-Pfaden finden Sie in der Dokumentation. Express Route Tester ist ein großartiges Tool zum Testen grundlegender Express-Routen, unterstützt jedoch keinen Mustervergleich.
Die Abfragezeichenfolge ist nicht Teil des Routingpfads.
Beispiel für einen Routing-Pfad mit der Zeichenfolge:
// 匹配根路径的请求 app.get('/', function (req, res) { res.send('root'); }); // 匹配 /about 路径的请求 app.get('/about', function (req, res) { res.send('about'); }); // 匹配 /random.text 路径的请求 app.get('/random.text', function (req, res) { res.send('random.text'); }); 使用字符串模式的路由路径示例: // 匹配 acd 和 abcd app.get('/ab?cd', function(req, res) { res.send('ab?cd'); }); // 匹配 abcd、abbcd、abbbcd等 app.get('/ab+cd', function(req, res) { res.send('ab+cd'); }); // 匹配 abcd、abxcd、abRABDOMcd、ab123cd等 app.get('/ab*cd', function(req, res) { res.send('ab*cd'); }); // 匹配 /abe 和 /abcde app.get('/ab(cd)?e', function(req, res) { res.send('ab(cd)?e'); });
Die Zeichen ?, , * und () sind eine Teilmenge regulärer Ausdrücke, - und werden in stringbasierten Pfaden wörtlich interpretiert.
Beispiel für einen Routing-Pfad mit regulären Ausdrücken:
// 匹配任何路径中含有 a 的路径: app.get(/a/, function(req, res) { res.send('/a/'); }); // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等 app.get(/.*fly$/, function(req, res) { res.send('/.*fly$/'); });
Routenhandle
Sie können mehrere Rückruffunktionen für die Anforderungsverarbeitung bereitstellen, die sich wie Middleware verhalten. Der einzige Unterschied besteht darin, dass diese Callback-Funktionen möglicherweise die next('route')-Methode aufrufen und andere Route-Callback-Funktionen überspringen. Mit diesem Mechanismus können Vorbedingungen für das Routing definiert werden. Wenn es keinen Sinn macht, die Ausführung auf dem vorhandenen Pfad fortzusetzen, kann die Kontrolle dem verbleibenden Pfad übertragen werden.
Routenhandles gibt es in vielen Formen und können eine Funktion, ein Array von Funktionen oder eine Mischung aus beiden sein, wie unten gezeigt.
Verwenden Sie eine Rückruffunktion, um das Routing abzuwickeln:
app.get('/example/a', function (req, res) { res.send('Hello from A!'); });
Verwenden Sie mehrere Rückruffunktionen, um das Routing abzuwickeln (denken Sie daran, das nächste Objekt anzugeben):
app.get('/example/b', function (req, res, next) { console.log('response will be sent by the next function ...'); next(); }, function (req, res) { res.send('Hello from B!'); });
Verwenden Sie das Callback-Funktions-Array, um das Routing zu verwalten:
var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } var cb2 = function (req, res) { res.send('Hello from C!'); } app.get('/example/c', [cb0, cb1, cb2]);
Verwenden Sie eine Mischung aus Funktionen und Funktionsarrays, um das Routing zu verwalten:
var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } app.get('/example/d', [cb0, cb1], function (req, res, next) { console.log('response will be sent by the next function ...'); next(); }, function (req, res) { res.send('Hello from D!'); });
Antwortmethode
Die Methoden des Antwortobjekts (res) in der folgenden Tabelle geben eine Antwort an den Client zurück und beenden damit den Anfrage-Antwort-Zyklus. Wenn im Routenhandle keine Methode aufgerufen wird, bleiben Anfragen vom Client hängen.