Fast jede Express-App, die ich sehe, enthält eine app.use
Anweisung für Middleware, aber ich habe keine klare, präzise Erklärung dafür gefunden, was Middleware tatsächlich ist und was die app.use
Anweisung tut. Sogar die Expressdokumente selbst sind diesbezüglich etwas vage. Können Sie mir diese Konzepte bitte erklären?
228
Antworten:
Middleware
Ich bin auf halbem Weg, das Konzept der Middleware in einem neuen Projekt zu trennen.
Mit Middleware können Sie einen Stapel von Aktionen definieren, die Sie durchlaufen sollen. Express-Server selbst sind ein Stapel von Middleware.
Anschließend können Sie dem Middleware-Stack durch Aufrufen Ebenen hinzufügen
.use
Eine Schicht im Middleware-Stack ist eine Funktion, die n Parameter (2 für Express,
req
&res
) und einenext
Funktion akzeptiert.Middleware erwartet, dass die Schicht einige Berechnungen durchführt, die Parameter erweitert und dann aufruft
next
.Ein Stapel macht nichts, wenn Sie nicht damit umgehen. Express verarbeitet den Stapel jedes Mal, wenn eine eingehende HTTP-Anforderung auf dem Server abgefangen wird. Mit Middleware behandeln Sie den Stack manuell.
Ein vollständigeres Beispiel:
In Express-Begriffen definieren Sie einfach einen Stapel von Operationen, die Express für jede eingehende HTTP-Anforderung verarbeiten soll.
In Bezug auf Express (anstatt Verbindung) verfügen Sie über globale Middleware und routenspezifische Middleware. Dies bedeutet, dass Sie einen Middleware-Stack an alle eingehenden HTTP-Anforderungen anhängen oder ihn nur an HTTP-Anforderungen anhängen können, die mit einer bestimmten Route interagieren.
Erweiterte Beispiele für Express- und Middleware:
quelle
app.use()
Syntax. Was ist der tatsächliche Rückgabewert der Middleware und was machtuse
sie damit?Nach der Vereinfachung kann ein Webserver als eine Funktion angesehen werden, die eine Anforderung aufnimmt und eine Antwort ausgibt. Wenn Sie also einen Webserver als Funktion betrachten, können Sie ihn in mehrere Teile organisieren und in kleinere Funktionen aufteilen, sodass die Zusammensetzung der ursprünglichen Funktion entspricht.
Middlewares sind die kleineren Funktionen, die Sie mit anderen zusammenstellen können, und der offensichtliche Vorteil besteht darin, dass Sie sie wiederverwenden können.
quelle
Ich füge eine späte Antwort hinzu, um etwas hinzuzufügen, das in den vorherigen Antworten nicht erwähnt wurde.
Inzwischen sollte klar sein, dass Middleware zwischen der Client-Anfrage und der Server-Antwort ausgeführt wird . Die am häufigsten benötigten Middleware-Funktionen sind Fehlerverwaltung, Datenbankinteraktion, Abrufen von Informationen aus statischen Dateien oder anderen Ressourcen. Um auf dem Middleware-Stack zu wechseln, muss der nächste Rückruf aufgerufen werden. Sie können ihn am Ende der Middleware-Funktion sehen, um zum nächsten Schritt im Ablauf zu gelangen.
Sie können den
app.use
Ansatz verwenden und einen Fluss wie folgt haben :Sie können aber auch einen anderen Ansatz verwenden und jede Middleware als Funktionsargumente übergeben. Hier ist ein Beispiel von der MooTools Nodejs-Website, auf der Midleware den Twitter-, Github- und Blog-Flow erhält, bevor der
response
an den Client zurückgesendet wird. Beachten Sie, wie die Funktionen als Argumente in übergeben werdenapp.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
. Die Verwendungapp.get
wird nur für GET-Anforderungenapp.use
aufgerufen , wird für alle Anforderungen aufgerufen.quelle
.get()
Methode akzeptiert drei Arten von Argumenten: das erste, das letzte und das mittlere. Intern erkennt es, ob mehr Argumente als 2 vorhanden sind, und verwendet diese (die mittleren) als Middleware-Funktionen und ruft sie von links nach rechts auf.expressjs guide hat eine ziemlich gute Antwort auf Ihre Frage. Ich empfehle Ihnen dringend, diese zu lesen. Ich poste einen kurzen Ausschnitt des Guides. Der Guide ist ziemlich gut.
Schreiben von Middleware zur Verwendung in Express-Apps
Überblick
Middleware- Funktionen sind Funktionen, die Zugriff auf das Anforderungsobjekt ( req ), das Antwortobjekt ( res ) und die nächste Funktion im Anforderungs- / Antwortzyklus der Anwendung haben. Die nächste Funktion ist eine Funktion im Express-Router, die beim Aufrufen die Middleware ausführt, die der aktuellen Middleware folgt.
Middleware-Funktionen können die folgenden Aufgaben ausführen:
Wenn die aktuelle Middleware-Funktion den Anforderungs- / Antwortzyklus nicht beendet, muss next () aufgerufen werden , um die Steuerung an die nächste Middleware-Funktion zu übergeben. Andernfalls bleibt die Anfrage hängen.
Beispiel
Hier ist ein Beispiel für eine einfache Express-Anwendung „Hello World“. Der Rest dieses Artikels definiert und fügt der Anwendung zwei Middleware-Funktionen hinzu: eine mit dem Namen myLogger , die eine einfache Protokollnachricht druckt, und eine mit dem Namen requestTime 1 , die den Zeitstempel der HTTP-Anforderung anzeigt.
Middleware-Funktion myLogger
Hier ist ein einfaches Beispiel für eine Middleware-Funktion namens "myLogger". Diese Funktion druckt nur "LOGGED", wenn eine Anfrage an die App durch sie geht. Die Middleware-Funktion ist einer Variablen namens myLogger zugeordnet.
Rufen Sie zum Laden der Middleware-Funktion app.use () auf und geben Sie die Middleware-Funktion an. Der folgende Code lädt beispielsweise die myLogger- Middleware-Funktion vor der Route zum Stammpfad (/).
Jedes Mal, wenn die App eine Anfrage erhält, druckt sie die Nachricht „LOGGED“ an das Terminal.
Die Reihenfolge des Ladens der Middleware ist wichtig: Middleware-Funktionen, die zuerst geladen werden, werden ebenfalls zuerst ausgeführt.
Wenn myLogger nach der Route zum Stammpfad geladen wird, erreicht die Anforderung diese nie und die App druckt nicht "LOGGED", da der Routenhandler des Stammpfads den Anforderungs- / Antwortzyklus beendet.
Die Middleware-Funktion myLogger druckt einfach eine Nachricht und leitet die Anforderung durch Aufrufen der next () -Funktion an die nächste Middleware-Funktion im Stapel weiter .
quelle
===== Sehr sehr einfache Erklärung =====
Middlewares werden häufig im Kontext des Express.js-Frameworks verwendet und sind ein grundlegendes Konzept für node.js. Kurz gesagt, es ist im Grunde eine Funktion, die Zugriff auf die Anforderungs- und Antwortobjekte Ihrer Anwendung hat. Die Art und Weise, wie ich darüber nachdenken möchte, ist eine Reihe von "Überprüfungen / Vorabprüfungen", die die Anforderung durchläuft, bevor sie von der Anwendung verarbeitet wird. Zum Beispiel wäre Middlewares eine gute Lösung, um festzustellen, ob die Anforderung authentifiziert ist, bevor sie zur Anwendung weitergeleitet wird, und um die Anmeldeseite zurückzugeben, wenn die Anforderung nicht authentifiziert ist, oder um jede Anforderung zu protokollieren. Es sind viele Middlewares von Drittanbietern verfügbar, die eine Vielzahl von Funktionen ermöglichen.
Einfaches Middleware-Beispiel:
Der obige Code würde für jede eingehende Anforderung ausgeführt und die Anforderungs-URL protokollieren. Die next () -Methode ermöglicht es dem Programm im Wesentlichen, fortzufahren. Wenn die next () -Funktion nicht aufgerufen wird, würde das Programm nicht weiter fortfahren und bei der Ausführung der Middleware anhalten.
Ein paar Middleware-Fallstricke:
quelle
next()
aber nicht aufreturn next()
. Was ist der Unterschied?next()
weil wir wollen, dass die nächste Middleware aufgerufen wird, ich denke nichtnext()
oderreturn next()
sollte einen Unterschied machen! Trotzdem kommt es darauf an, wie der Code lautet ...Middlewares sind Funktionen, die in der Mitte ausgeführt werden, nachdem die Eingabe / Quelle eine Ausgabe erzeugt, die die endgültige Ausgabe sein oder von der nächsten Middleware verwendet werden kann, bis der Zyklus abgeschlossen ist.
Es ist wie ein Produkt, das eine Montagelinie durchläuft, wo es im Laufe der Zeit geändert wird, bis es fertiggestellt, bewertet oder abgelehnt wird.
Eine Middleware erwartet, dass ein Wert bearbeitet wird (dh Parameterwerte), und basierend auf einer Logik ruft die Middleware die nächste Middleware auf oder nicht oder sendet eine Antwort an den Client zurück.
Wenn Sie das Middleware-Konzept immer noch nicht verstehen können, ähnelt es dem Decorator oder der Chain of Command-Muster.
quelle
Middleware ist eine Teilmenge verketteter Funktionen, die von der Express js-Routing-Schicht aufgerufen werden, bevor der benutzerdefinierte Handler aufgerufen wird. Middleware-Funktionen haben vollen Zugriff auf die Anforderungs- und Antwortobjekte und können beide ändern.
Die Middleware-Kette wird immer in der genauen Reihenfolge aufgerufen, in der sie definiert wurde. Daher ist es wichtig, dass Sie genau wissen, was eine bestimmte Middleware tut.
Sobald eine Middleware-Funktion beendet ist, ruft sie die nächste Funktion in der Kette auf, indem sie das nächste Argument als Funktion aufruft.
Nachdem die gesamte Kette ausgeführt wurde, wird der Benutzeranforderungshandler aufgerufen.
quelle
Halte die Dinge einfach, Mann!
Hinweis: Die Antwort bezieht sich auf die in ExpressJS integrierten Middlware-Fälle. Es gibt jedoch unterschiedliche Definitionen und Anwendungsfälle für Middleware.
Aus meiner Sicht fungiert Middleware als Dienstprogramm oder Hilfsfunktion, aber ihre Aktivierung und Verwendung ist völlig optional, indem sie den
app.use('path', /* define or use builtin middleware */)
Code verwendet, der nicht von uns geschrieben werden soll, um sehr häufige Aufgaben zu erledigen, die für jede HTTP-Anforderung unseres Clients erforderlich sind B. die Verarbeitung von Cookies, CSRF-Token und ..., die in den meisten Anwendungen sehr häufig vorkommen, sodass Middleware uns dabei helfen kann, diese alle für jede HTTP-Anforderung unseres Clients in einem Stapel, einer Reihenfolge oder einer Reihenfolge von Vorgängen auszuführen, und dann das Ergebnis des Prozesses als eine einzelne Einheit der Client-Anfrage .Beispiel:
Das Akzeptieren von Kundenanfragen und das Bereitstellen von Rückantworten gemäß ihren Anforderungen ist die Natur der Webservertechnologie.
Stellen Sie sich vor, wir antworten nur mit "Hallo Welt!" Der Text für eine GET HTTP-Anfrage an den Root-URI unseres Webservers ist ein sehr einfaches Szenario und benötigt nichts anderes. Stattdessen überprüfen wir den aktuell angemeldeten Benutzer und antworten dann mit "Hallo, Benutzername!" benötigt etwas mehr als üblich In diesem Fall benötigen wir eine Middleware, um alle Clientanforderungs-Metadaten zu verarbeiten und uns die aus der Clientanforderung entnommenen Identifikationsinformationen bereitzustellen. Anschließend können wir unseren aktuellen Benutzer anhand dieser Informationen eindeutig identifizieren und können auf ihn antworten / sie mit einigen verwandten Daten.
Hoffe es hilft jemandem!
quelle
Kurz gesagt, wenn ich es so erklären möchte, lerne ich dies aus dem Traversymedia Youtube Channel Express Crash Kurs.
ok also Middleware ist eine Funktion, die ausgeführt wird, nachdem Sie Ihre Route wie folgt aufgerufen haben.
Diese Logger-Funktion wird jedes Mal ausgeführt, wenn Sie Ihre Seite aktualisieren. Dies bedeutet, dass Sie alles darin schreiben können, was Sie tun müssen, nachdem Ihre Seite einen API-Aufruf für eine Operation ausgeführt hat. Setzen Sie die Dinge im Grunde genommen zurück. und stellen Sie diese Middleware vor Ihre Routenfunktion. Die Reihenfolge der Middleware ist wirklich wichtig oder funktioniert nicht
quelle