‫-: (Mann) In diesem Vortrag lernen
‫Sie, wie Sie mehrere Middleware-Funktionen für dieselbe Route verketten.
‫Bis zu diesem Punkt haben wir also
‫immer nur eine Middleware-Funktion übergeben, wenn wir eine Middleware definieren wollten.
‫Also zum Beispiel hier, um diese Post-Anfrage zu
‫bearbeiten, haben wir nur diese Middleware-Funktion übergeben,
‫die unser createTour-Handler ist.
‫Okay? Und das ist
‫die einzige Funktion, die aufgerufen wird, wenn wir eine Post-Anfrage erhalten.
‫Rechts? Aber sagen wir jetzt,
‫dass wir tatsächlich mehrere Middleware-Funktionen ausführen möchten.
‫Jetzt könnten Sie fragen: „Warum sollten wir das tun? ".
‫Nun, wir könnten zum Beispiel vor createTour hier eine Middleware
‫ausführen, um tatsächlich die Daten zu überprüfen, die
‫im Hauptteil eingehen.
‫Rechts? Also ein bisschen ähnlich zu dem, was wir vorher hatten.
‫Wir haben diese Check-ID-Middleware also zuvor durchgeführt, um
‫zu überprüfen, ob die ID tatsächlich gültig ist, und dies
‫außerhalb der eigentlichen Routenhandler, sodass
‫sie sich nur mit dem Abrufen, Aktualisieren oder Löschen einer
‫Tour befassen.
‫Rechts? Und hier, in diesem speziellen Beispiel
‫mit post, möchten wir vielleicht dasselbe tun.
‫Also wie gesagt, wir möchten vielleicht prüfen, ob dies erforderlich ist. buddy enthält tatsächlich die
‫Daten, die wir für die Tour haben wollen.
‫Okay? Und so machen wir das.
‫Und eigentlich möchte ich, dass du es zuerst alleine machst.
‫Dies ist also eine Art Herausforderung, die Sie sich stellen möchten,
‫um die Konzepte zu verwenden, über die wir
‫an dieser Stelle so oft gesprochen haben, und Ihre eigene
‫Middleware-Funktion zu erstellen.
‫Also lass es mich einfach hier als Kommentar schreiben.
‫Ich
‫möchte, dass Sie eine checkBody-Middleware-Funktion erstellen
‫und darin überprüfen,
‫ob der Textkörper die name-Eigenschaft für den Tournamen und
‫die price-Eigenschaft enthält.
‫Gut? Und wenn nicht, möchte ich, dass
‫Sie einen vierhundert Statuscode zurücksenden.
‫Wenn nicht, senden Sie vierhundert zurück, was für eine
‫schlechte Anfrage steht.
‫Im Grunde also eine ungültige Anfrage des Kunden, die
‫in diesem Fall versucht, eine neue Tour ohne Namen und
‫ohne Preiseigenschaften zu erstellen.
‫Okay! Und das ist es tatsächlich.
‫Und (lacht) eigentlich nicht.
‫Daher möchte ich, dass Sie es auch zum Post-Handler-Stack hinzufügen.
‫Grundsätzlich. Okay?
‫Ich möchte, dass Sie es hier hinzufügen.
‫Und ich werde Ihnen tatsächlich sagen, wie das
‫geht, weil wir es zu diesem Zeitpunkt noch nicht gemacht haben.
‫Es ist also ganz einfach. Nehmen wir an, unsere Funktion heißt
‫Middleware und Sie müssen diese Funktion einfach
‫hier vor dem createTour-Handler hinzufügen, der letztendlich die
‫Tour erstellt. Okay?
‫Wenn wir also eine Post-Anfrage für diese Route haben,
‫wird sie zuerst diese Middleware und erst dann
‫die createTour ausführen.
‫Okay? So verketten wir also zwei verschiedene Middlewares.
‫Aber jetzt möchte ich, dass Sie weitermachen und diese
‫Middleware namens checkBody erstellen.
‫Also pausiere das Video jetzt und versuche es bitte selbst.
‫Okay! Ich hoffe, Sie waren damit erfolgreich
‫und haben es dann getestet und dass alles funktioniert.
‫Lassen Sie mich nun fortfahren und es auf meine Weise implementieren.
‫Wir haben also diesen Fehler hier, aber machen Sie sich keine Sorgen.
‫Das liegt an dieser Middleware, die nicht definiert ist.
‫Lassen Sie mich es hier gleich nach der checkID-Middleware tun.
‫Also Exporte. checkKörper.
‫Wir müssen eine Antwort anfordern und weiter.
‫Und so ist es eigentlich ganz einfach.
‫Also wenn keine Anfrage kommt. Karosserie. Name, und ich
‫denke, das ist der Name, aber
‫lassen Sie uns das schnell überprüfen.
‫So ist es hier Tour einfach.
‫Ja, und tatsächlich heißt es 'Name' und
‫das andere ist 'Preis'.
‫Wenn also kein Name des Anfragetexts oder
‫kein Anfragetext vorhanden ist. Preis gut, in
‫diesem Fall werden wir nach wie vor von dieser
‫Funktion zurückkehren und eine Antwort zurücksenden.
‫Der Status hier ist also nicht vergessen: vierhundert fügen Sie dann
‫etwas 'json' hinzu, wo der Status fehlgeschlagen ist.
‫Das ist immer dann der Fall, wenn wir einen Vierhunderter-Code haben.
‫Fügen Sie dann die
‫Meldung "Fehlender
‫Name oder Preis" hinzu.
‫Okay? Preis und Name müssen also gleichzeitig da sein.
‫Wenn also entweder der Preis nicht da ist oder der Name nicht
‫da ist, senden wir diese Fehlermeldung bereits.
‫Okay? Aber wenn alles stimmt, dann wollen
‫wir zur nächsten Middleware übergehen.
‫Und das sagen wir hier.
‫Und dann wird die nächste Middleware natürlich createTour sein.
‫Also dieser.
‫Also, lass uns fortfahren und es dann hier hinzufügen.
‫Also tourController. checkKörper.
‫Alles klar, jetzt ist der Fehler weg und wir sollten
‫ihn jetzt testen können. Schließen wir also diejenigen,
‫die uns nicht interessieren, und erstellen Sie eine neue Tour.
‫Im Moment haben wir also unseren Körper mit dem Namen, der Dauer
‫und der Schwierigkeit, aber es gibt keinen Preis.
‫Also sollten wir jetzt unseren Fehler bekommen. Rechts?
‫Also testen wir das. Senden. Und tatsächlich haben
‫wir bei unserer vierhundert schlechten Anfrage 'Name oder Preis fehlen'.
‫Okay? Und so analysieren wir noch einmal, was hier passiert ist.
‫Also schlug unsere Anfrage hier auf diese Route und
‫es war eine Post-Anfrage. Und so führt es dann
‫diese Middleware-Funktion aus und von dieser Funktion senden wir dann diese
‫äh-Antwort, die besagt, dass, äh, der Name oder der Preis fehlt.
‫Okay? Aber wenn jetzt noch der Preis hinzukommt... es ist also
‫egal welcher preis, schick es, naja
‫dann funktioniert alles gut und wir bekommen eine 201 erstellt.
‫Also, was ist diesmal passiert? Nun, es hat nach dem Hauptteil gesucht und
‫diese Bedingung war nicht wahr und
‫so rief es die nächste Middleware im Stack auf, die createTour ist.
‫Also erstellte es eine Tour, schickte das Ergebnis
‫zurück und beendete so den Anfrage-Antwort-Zyklus.
‫Rechts? Ich hoffe, das war eine, äh, nette kleine Herausforderung
‫und wir werden diese Art von
‫Logik hier die ganze Zeit verwenden, wo wir hier
‫mehrere Arten von Handlern für dieselbe Route verketten. Hier könnten wir also zum Beispiel prüfen, ob ein bestimmter Benutzer
‫eingeloggt ist oder ob
‫er die Privilegien, also die Zugriffsrechte hat, sogar eine neue Tour zu schreiben.
‫Oder wirklich alle möglichen Dinge, die wir passieren wollen,
‫bevor die Tour tatsächlich erstellt wird.
‫Okay? Und wieder tun wir das, weil wir die gesamte
‫Logik, die sich nicht wirklich
‫mit der Erstellung der neuen Ressource befasst, außerhalb dieses Handlers übernehmen möchten. Damit sich dieser Handler wirklich nur mit
‫der Arbeit beschäftigt,
‫die er verrichten soll.