Modular Routing

Stellen Sie sich folgendes Szenario vor: Sie besitzen einen Laden, der Haustiere verkauft, und ein Kunde möchte bei Ihnen Kaninchen und Katzen kaufen.

Wenn Sie die oben definierten grundlegenden Routing-Methoden verwenden, sieht der Code wie folgt aus:

Beachten Sie, dass wir dieselben Routen mehrfach geschrieben haben.

Das ständige Schreiben der Routen erhöht jedoch die Redundanz und die Tippfehler. Außerdem ist es hilfreich, unseren Code modularer zu gestalten, wie es sich gehört.

Als Programmierer möchte man seinen Code immer sauberer aussehen lassen. Um den obigen Code leichter lesbar zu machen, können wir zwei Methoden verwenden.

Verwendung von app.route

Hier kommt app.route ins Spiel. Sie schreiben den Pfad einmal, und Sie können mehrere Route-Handler verketten.

Sie können app.route wie folgt implementieren:

app.route(PATH)
.get(callback)
.post(callback)
//can add more HTTP requests (.put, .delete, etc)

Wir können nun den Code umschreiben:

Der Code sieht sauberer aus, und Sie mussten die Route für jede HTTP-Anfrage nur einmal eingeben.

Einen weiteren Haken gibt es allerdings: Der Parameter username existiert in allen Routen. Immer wieder username zu tippen, begünstigt immer noch Tippfehler und Redundanzen. Wie wäre es, wenn wir es noch modularer machen könnten?

express.Router()

Wir können express.Router() verwenden, um modulare, einbaufähige Routen-Handler zu erstellen. Eine Router-Instanz ist ein komplettes Middleware- und Routing-System, weshalb sie oft als „Mini-App“ bezeichnet wird.

Wir müssen nur den Startpunkt angeben, und die Router-Instanz erledigt den Rest für uns.

Um app.Router() zu verwenden, müssen wir ein separates Modul erstellen, eine Instanz von app.Router instanziieren und dann module.exports zum Exportieren der Instanz verwenden.

Weitere Details zur Verwendung von module.exports finden Sie in meinem vorherigen Artikel.

In diesem Beispiel werden wir nur einen einfachen Pfad behandeln, der die Parameter username und id enthalten würde.

In routerExample.js:

Wir verwenden router.route(), das ähnlich ist wie app.route. Das definierte Modul sagt: „Solange der Pfad mit /:username/:id endet, führen Sie den folgenden Code wie definiert aus.“

Um ihn zu verwenden, verwenden Sie ein anderes Modul, main.js:

Wie in den Kommentaren zu lesen ist, verwenden wir app.use, um routeExample.js anzuweisen, die Funktionen auszuführen, deren Routen mit dem ersten Parameter beginnen. Der erste Parameter kann als Startpunkt bezeichnet werden. Daher wird der Pfad starting point + PATH defined by router lauten.

Zum Beispiel werden wir nun gemäß Zeile 6 GET- und POST-Anfragen behandeln, die mit ‘/cats’ beginnen. Sie werden den Pfad cats/:username/:id haben.

Wie immer können Sie im Modul routeExample verschiedene Routen verwenden, aber das einzige, was Sie angeben müssen, ist der Startpunkt in app.use.

Um den Code auszuführen, geben Sie node main in einem Terminalfenster ein und verwenden cURL entsprechend in einem anderen Fenster.

Unterschiedliche Routen im express.Router mit Middleware

In diesem Beispiel navigieren wir auf die Birds-Homepage unseres Zoofachgeschäfts und definieren eine Middleware-Funktion, timeLog, die den Zeitpunkt der jeweiligen Pfadanforderung ausgibt.

birds.js:

In main.js:

var birds = require('./birds')
app.use('/birds', birds) //handle /birds and /birds/about

Mit dem node-Befehl wird der Code ausgeführt, dann mit cURL wie folgt:

Ausgabe des Client-.Seitenfenster

Ausgabe des Server-Seitenfenster

Damit, ist es in express.Router möglich, Middleware-Funktionen nur in bestimmten Pfaden auszuführen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.