Ich beginne mit NodeJS und Express 4 und bin etwas verwirrt. Ich habe die Express-Website gelesen, kann aber nicht sehen, wann ich einen Routenhandler oder wann ich ihn verwenden soll express.Router
.
Wie ich sehen konnte, sollte ich Folgendes verwenden, wenn ich eine Seite oder etwas anzeigen möchte, wenn der Benutzer /show
zum Beispiel trifft :
var express = require('express')
var app = express()
app.get("/show", someFunction)
Am Anfang dachte ich, das sei alt (für Express 3). Ist das richtig oder ist das auch der Weg für Express 4?
Wenn dies in Express 4 der Fall ist, wofür wird es express.Router
verwendet?
Ich habe fast das gleiche Beispiel wie oben gelesen, aber mit express.Router
:
var express = require('express');
var router = express.Router();
router.get("/show", someFunction)
Was ist der Unterschied zwischen beiden Beispielen?
Welches sollte ich verwenden, wenn ich nur eine einfache Testwebsite erstellen möchte?
Router
nicht.listen()
für Anfragen für sich. Es ist nützlich, um Ihre Anwendung in mehrere Module zu unterteilen - umRouter
in jedem eineapp
Doserequire()
und.use()
als Middleware zu erstellen .app.get(..)
Syntax nur eine Abkürzung, um das Arbeiten mitexpress.router
bequemer zu gestalten. Wenn Sie gerade erst anfangen, machen Sie sich keine Sorgen über die Besonderheiten des Routers.app's
eigenen Routing-Methodenapp.get()
für Ihre Anforderungen ausreichend sind, verwenden Sie sie. DasRouter
dient nur der Vereinfachung, damit Sie die Anwendung über mehrere Module hinweg organisieren können. Aus dem Handbuch : " Mit derexpress.Router
Klasse können modular montierbare Routenhandler erstellt werden. EineRouter
Instanz ist eine vollständige Middleware und ein Routing-System. Aus diesem Grund wird sie häufig als" Mini-App "bezeichnet. "Antworten:
app.js.
dogs.js
Beim
var app = express()
Aufruf wird ein App-Objekt zurückgegeben. Betrachten Sie dies als die Haupt-App .Beim
var router = express.Router()
Aufruf wird eine etwas andere Mini-App zurückgegeben. Die Idee hinter der Mini-App ist, dass jede Route in Ihrer App ziemlich kompliziert werden kann und Sie davon profitieren würden, den gesamten Code in eine separate Datei zu verschieben. Der Router jeder Datei wird zu einer Mini-App , die der Haupt-App sehr ähnlich ist .Im obigen Beispiel wurde der Code für die Route / dog in eine eigene Datei verschoben, damit die Haupt-App nicht überladen wird . Der Code für / Katzen und / Vögel würde in ihren eigenen Dateien ähnlich strukturiert sein. Indem Sie diesen Code in drei Mini-Apps aufteilen , können Sie die Logik für jede einzelne isoliert bearbeiten, ohne sich Gedanken darüber machen zu müssen, wie sich dies auf die beiden anderen auswirkt.
Wenn Sie Code (Middleware) haben, der sich auf alle drei Routen bezieht, können Sie ihn vor den Aufrufen in die Haupt-App einfügen
app.use(...)
. Wenn Sie Code (Middleware) haben, der sich nur auf eine dieser Routen bezieht, können Sie ihn nur für diese Route in die Datei einfügen.quelle
app.use('/dogs', dogs)(app)
da Sie dort Routen definieren, zusätzlich (und korrigieren Sie mich, wenn ich falsch liege), wenn Sie dies auf diese Weise tun, hat das App-Objekt die gesamte zuvor platzierte Middleware darauf und zusätzliches Middleware wird dem App-Objekt hinzugefügt (vorausgesetzt, es befindet sich mehr Middleware auf der Hunderoute). Wenn Sie es verwendenroute.get('/dogs', route)
, wird die Middleware nur an das App-Objekt übergeben, wenn Sie mit den in diesem Router definierten Routen interagieren. Wenn sich der Anwendungsbereich außerhalb der Route befindet, hat es keinen Zugriff auf diese Middleware.app.use('/dogs', show)
. Auf diese Weise ist die Route unabhängig von der App und kann in jeder Express-App wiederverwendet werden. Middleware, die irgendwo platziert wird, bevor eine Route von dieser Route verwendet wird. Wenn Sie Middleware über alle Routen in app.js platzieren, verwenden alle Routen diese Middleware. Wenn Sie Middleware in eine Routendatei (dogs.js) einfügen, wird diese nur von dieser Route verwendet. Wenn Sie Middleware nach der GET-Route in dogs.js platzieren, wird sie nur von der POST-Route verwendet (sofern sie mit einer Antwort endet).app.get('/dogs'dogs,)(app)
da die Frage über die Get-Funktion von app.get und route.get war. Sie haben gezeigt, wie Sie die Routen trennen, um sie überschaubar zu machen. Aber wäre meine Anakdote nicht richtig, wenn wir darüber sprechenapp.get
? Wenn ich auf einen PC komme, werde ich meinen obigen Kommentar bearbeiten.Router
ist nicht.listen()
für Anfragen alleine". Das könnte der Hauptunterschied sein.Express 4.0 wird mit dem neuen Router geliefert. Wie auf der Website erwähnt:
Unter https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 gibt es einen guten Artikel, der die Unterschiede beschreibt und beschreibt, was mit Routern gemacht werden kann.
Zusammenfassen
Mit Routern können Sie Ihren Code einfacher modularisieren. Sie können Router verwenden als:
Hinweis:
Das
app.router
Objekt, das in Express 4 entfernt wurde, hat in Express 5 ein Comeback erlebt. In der neuen Version ist es nur ein Verweis auf den Basis-Express-Router, anders als in Express 3, wo eine App ihn explizit laden musste.quelle
Wie im obigen Beispiel können wir unter einer Route verschiedene HTTP-Anforderungsmethoden hinzufügen.
quelle
Angenommen, Ihre Anwendung ist wenig komplex. Als erstes teilen wir die Anwendung in mehrere Module auf, damit Änderungen in einem Modul die anderen nicht überladen und Sie weiter an einzelnen Modulen arbeiten können. Letztendlich müssen Sie jedoch alles in ein Modul integrieren, seit Sie erstellen eine einzelne Anwendung. Es ist, als hätten wir eine Hauptanwendung und wenige untergeordnete Anwendungen, deren übergeordnete Anwendung die Hauptanwendung ist. Wenn wir also die übergeordnete Anwendung erstellen, erstellen wir eine mit
Und zu dieser übergeordneten Anwendung müssen wir die untergeordneten Anwendungen einbringen. Da es sich bei den untergeordneten Anwendungen jedoch nicht um völlig unterschiedliche Anwendungen handelt (da sie im selben Kontext-Java-Begriff ausgeführt werden), bietet Express die Möglichkeit, dies mithilfe der Router-Funktion des Expresse zu tun. Dies tun wir in den einzelnen untergeordneten Moduldateien und Rufen wir ein solches untergeordnetes Modul als aboutme auf .
Mit module.exports stellen wir dieses Modul anderen zur Verfügung, und da wir Dinge modularisiert haben, müssen wir die Moduldateien der übergeordneten Anwendung mithilfe der Anforderungsfunktion des Knotens wie alle anderen Module von Drittanbietern zur Verfügung stellen, und die übergeordnete Datei sieht aus etwas wie das.
Nachdem wir dieses untergeordnete Modul dem übergeordneten Modul zur Verfügung gestellt haben, müssen wir der übergeordneten Anwendung mitteilen, wann diese untergeordnete Anwendung verwendet werden soll. Nehmen wir an, wenn ein Benutzer den Pfad trifft aboutme wir das Kind Anwendung über mich brauchen die Anfrage zu bearbeiten und wir tun es durch die der Expresse mit Verwendung Methode.
und auf einen Schlag sieht die übergeordnete Datei so aus
Vor allem kann der Elternteil einen Server starten, wo das Kind nicht kann. Hoffe das klärt sich. Weitere Informationen finden Sie im Quellcode, der einige Zeit in Anspruch nimmt, aber viele Informationen enthält. Danke dir.
quelle
parent.use('/aboutme', child)
?Die Verwendung von app.js zum Schreiben von Routen bedeutet, dass alle Benutzer darauf zugreifen können, wenn app.js beim Start der Anwendung geladen wird. Durch das Einfügen von Routen in Express.router () - Mini-Apps wird jedoch die Zugänglichkeit geschützt und eingeschränkt.
quelle
express.Router
hat viele Möglichkeiten:/show
Route muss nicht mit der Route übereinstimmen/Show
. Dieses Verhalten ist standardmäßig deaktiviert/show/
Route nicht gleich/show
, dieses Verhalten ist standardmäßig ebenfalls deaktiviertquelle
Mit einem Wort, Sie
express.Router
können im Vergleich zuapp.get()
Middleware mehr tun , außerdem können Sie ein weiteres Router-Objekt mit definierenexpress.Router()
quelle