‫Kursleiter: Also, nach all dem Gerede über Middleware,
‫lassen Sie uns
‫nun tatsächlich unsere eigenen Middleware-Funktionen erstellen.
‫Und denken Sie noch einmal
‫daran, dass wir bereits Middleware verwendet haben.
‫Schauen wir uns das also an.
‫Und irgendwo hier oben.
‫Sie sehen also, dass
‫wir, um Middleware zu verwenden, App-Punkt-Verwendung verwendet haben, okay?
‫Die Verwendungsmethode ist also diejenige, die wir verwenden, um
‫Middleware tatsächlich zu verwenden.
‫Also, fügen Sie unserem Middleware-Stack Middleware hinzu, okay?
‫Dieser Express-Punkt-Json, der diese Json-Methode hier aufruft, gibt im
‫Grunde eine Funktion zurück, okay?
‫Und so wird diese Funktion dann dem Middleware-Stack hinzugefügt.
‫Auf ähnliche Weise
‫können wir unsere eigene Middleware-Funktion erstellen.
‫Also, lass uns das jetzt tun.
‫Und so müssen wir natürlich immer noch die App-Punktverwendung verwenden.
‫Okay, und jetzt müssen wir hier nur noch
‫den Pfad in unserer Funktion angeben, den wir dem Middleware-Stack hinzufügen möchten.
‫Erinnern Sie sich also aus dem
‫letzten Video daran, dass wir
‫natürlich in jeder Middleware-Funktion Zugriff auf die Anfrage und die Antwort haben, okay?
‫Aber wir haben auch die nächste Funktion.
‫Und so bearbeiten wir diese Middleware-Funktion einfach
‫als drittes Argument, okay?
‫Und so weiß express dann,
‫dass wir hier eigentlich eine Middleware definieren.
‫In Ordung.
‫Genau wie früher
‫hätten wir dieses Argument hier auch anders
‫nennen können, wie X oder N, oder es spielt keine Rolle.
‫Wichtig ist, dass
‫es das dritte Argument dieser Funktion ist.
‫Express übergibt also grundsätzlich die
‫nächste Funktion als drittes Argument an diese Middleware-Funktion.
‫Und wir können es dann nennen, wie wir wollen.
‫Aber noch einmal, als nächstes kommt wirklich die Konvention
‫in Express, und um
‫Verwirrung zu vermeiden, verwenden wir immer diesen Namen, okay?
‫Und das gleiche für Anfrage
‫und Antwort, wie ich bereits erwähnt habe, könnten wir sie anders nennen.
‫Aber die Konvention ist, sie so zu nennen.
‫Wie auch immer, lassen Sie uns einfach etwas
‫an der Konsole protokollieren, hier
‫in dieser Middleware-Funktion, nur damit wir etwas Code haben, der
‫bei jeder neuen Anforderung tatsächlich ausgeführt wird.
‫Sagen wir
‫hallo von der Middleware.
‫Und fügen Sie hier noch einmal ein paar Emojis hinzu, damit es ein wenig knallt.
‫Das gefällt mir sehr.
‫Und was passiert hier?
‫Ah richtig.
‫Das ist also der Code, den wir hier ausführen möchten.
‫Und jetzt, genau wie wir im letzten Video
‫gesprochen haben, müssen wir tatsächlich die nächste Funktion aufrufen, okay?
‫Und wenn wir hier nicht
‫als nächstes anrufen, naja, dann würde der
‫Anfrage/Antwort-Zyklus an dieser Stelle wirklich stecken bleiben.
‫Wir wären nicht in
‫der Lage, weiterzumachen, und wir würden niemals eine Antwort an den Kunden zurücksenden.
‫Ich kann also nicht genug betonen, wie wichtig es
‫ist, niemals zu vergessen, next in all Ihrer Middleware zu verwenden.
‫Okay, und so einfach ist es.
‫Alles, was wir tun müssen, ist als nächstes anzugeben.
‫Also dieses Argument hier.
‫Und dann rufen Sie diese Funktion tatsächlich so auf.
‫Okay.
‫Und damit sind wir tatsächlich bereit, es auszuprobieren.
‫Und alles, was wir tun
‫müssen, ist eine einfache Anfrage an unsere API zu senden.
‫Hier ist also die API.
‫Lassen Sie uns dieses hier schließen.
‫Und so ist es auch egal,
‫denn das gilt natürlich für jede einzelne Anfrage.
‫Gehen wir also zurück.
‫Und tatsächlich haben wir Hallo von der
‫Middleware, die auf unserer Konsole angemeldet ist, okay?
‫So großartig.
‫Und ich wollte kurz auf das eingehen, was ich
‫gerade gesagt habe, nämlich, dass
‫diese Middleware hier für jede einzelne Anfrage gilt, okay?
‫Und das liegt daran, dass wir keine Route angegeben haben.
‫Denken Sie also daran, dass, bevor ich sagte, dass alle
‫Route-Handler hier eigentlich selbst eine Art Middleware sind.
‫Es handelt sich lediglich
‫um Middleware-Funktionen, die nur für eine bestimmte URL gelten.
‫Also eine bestimmte Route, okay.
‫Aber diese einfacheren Middleware-Funktionen, die
‫wir hier definieren,
‫werden auf jede einzelne Anfrage angewendet.
‫Zumindest, wenn der Route-Handler vor
‫dieser Middleware steht.
‫Lassen Sie mich Ihnen also etwas zeigen.
‫Und ich werde es von hier aus
‫schneiden und es jetzt tatsächlich hier
‫nach diesem Routenhandler platzieren.
‫Was glauben Sie, was jetzt
‫passieren wird, wenn ich diese Route anrufe?
‫Schauen wir also, was passiert.
‫Also genau diese Route, also die, die ich Ihnen gerade gezeigt habe, lassen
‫Sie mich die Anfrage dorthin senden.
‫Und jetzt gehen wir zurück und jetzt haben wir kein
‫Hallo von der Middleware.
‫Also, warum ist das so?
‫Nun, einfach weil diese Middleware, also
‫dieser Route-Handler hier,
‫vor dieser Middleware-Funktion steht, die wir hier haben.
‫Und dieser Route-Handler, der
‫in diesem Fall alle Touren holt, beendet tatsächlich den Request-Response-Zyklus.
‫Werfen wir also einen Blick darauf.
‫So haben wir alle Touren bekommen.
‫Also, wo ist das?
‫Ja, also hier ist die Funktion und indem wir
‫ein Ergebnis mit res dot
‫json senden, beenden wir tatsächlich den Anfrage-Antwort-Zyklus.
‫Und so ist die nächste Middleware
‫im Stack, die in diesem
‫Fall diese ist, also wird unsere benutzerdefinierte dann nicht aufgerufen.
‫Auch hier, weil der Zyklus bereits beendet ist, okay.
‫Stellen Sie also sicher, dass diese Reihenfolge beim
‫Expressversand eine große Bedeutung hat, okay.
‫Es ist wichtig zu
‫verstehen, dass Express-Apps so funktionieren, okay.
‫Um das zu testen, versuchen wir
‫also zu sehen, was passiert,
‫wenn wir eine Anfrage an diese Route senden.
‫So erhalten Sie eine Tour-Update-Tour oder eine Tour löschen.
‫Lassen Sie uns dies tun, die Anfrage hierher
‫senden und zurückgehen, und jetzt haben wir Hallo
‫von der Middleware.
‫Das haben wir also eigentlich erwartet, oder?
‫Das liegt natürlich daran, dass diese Middleware hier
‫jetzt vor dem Route-Handler steht.
‫Und so ist es natürlich ein
‫Teil des Middleware-Stacks, der ausgeführt wird, bevor der Anfrage-Antwort-Zyklus endet.
‫In Ordnung, sinnvoll?
‫Nehmen wir das also zurück und
‫definieren diese Art von globaler
‫Middleware hier normalerweise vor allen unseren Route-Handlern.
‫In Ordnung, dies ist also eine
‫sehr einfache Middleware-Funktion, die wir gerade definiert haben, um Code auszuführen.
‫Aber lassen Sie uns tatsächlich einen anderen machen.
‫Und natürlich können
‫wir so viele Middleware-Funktionen haben, wie wir möchten.
‫Und dieses Mal
‫wollen wir eigentlich das Request-Objekt manipulieren.
‫Die Signatur ist hier also
‫immer dieselbe, immer Anfrage, Antwort und Weiter.
‫Und jetzt lassen Sie uns die Anfrage tatsächlich manipulieren.
‫Alles, was wir in
‫diesem Fall tun möchten, ist, der Anfrage die aktuelle Uhrzeit hinzuzufügen.
‫Wir können also einfach eine
‫Eigenschaft für das Anfrageobjekt namens Anfragezeit definieren.
‫Und dann stellen Sie es auf ein
‫neues
‫Datum ein, was im Grunde gleich jetzt bedeutet.
‫Und dann können wir eine sehr praktische Datumsfunktion verwenden,
‫die als ISO-String aufgerufen wird, die ihn
‫dann in einen schönen, lesbaren
‫String für uns umwandelt.
‫Nehmen wir also an, wir haben einen Route-Handler,
‫der wirklich die Informationen
‫darüber benötigt, wann genau die Anfrage auftritt.
‫Die sehr einfache Lösung besteht also
‫darin, einer Anfrage einfach so etwas mithilfe von Middleware hinzuzufügen.
‫In Ordung?
‫Vergessen Sie jetzt
‫natürlich nicht, die nächste Middleware im Stack aufzurufen, okay.
‫Also im Moment haben wir Anfrage, Zeit für alle Anfragen.
‫Wir können hier also jetzt zum Beispiel einen Routenhandler
‫verwenden (murmelt), um alle Touren dazu zu bringen, das einfach
‫für uns in die Konsole zu protokollieren.
‫Also Konsolen-Dot-Log und seine eigentliche Anfragezeit.
‫Okay, oder wir könnten dies auch in der Antwort senden.
‫Lass mich das einfach testen.
‫Und nennen wir das
‫einfach angefordert um und req dot request time.
‫Das ist es.
‫Also, ja, lass uns weitermachen und das herausfinden.
‫Unsere Middleware ist also richtig, oder?
‫Ja, also rufen wir als nächstes an, wenn wir fertig sind,
‫und testen wir das jetzt.
‫Denken Sie daran, dass es auf allen Touren steht.
‫Und wenn wir jetzt zurückgehen oder wenn wir nach
‫oben gehen, nun, sollte es eigentlich hier sein.
‫Also, was ist hier falsch?
‫Sie sehen,
‫dass wir hier unten tatsächlich nur eine
‫Funktion protokolliert haben und natürlich haben wir die beiden ISO-Strings nicht wirklich aufgerufen.
‫Es ist also eine Methode, die wir nennen müssen.
‫Also speichern Sie es und versuchen Sie es erneut.
‫Und jetzt haben wir um und dann den heutigen Termin angefragt.
‫So perfekt.
‫Das kam von unserer Middleware.
‫Einfach deshalb, weil wir diese Eigenschaft zu unserer Anfrage hinzugefügt haben.
‫Toll.
‫Ich hoffe also, dass Sie damit einen großen Schritt
‫nach vorne gemacht haben, um wirklich zu verstehen, wie die
‫Node-App funktioniert,
‫wie Middleware funktioniert, wie der gesamte Request-Response-Zyklus funktioniert,
‫denn das wird wirklich den Unterschied
‫machen, wenn Sie schreiben eigene Anwendungen.