‫Kursleiter: Willkommen zurück, bevor wir uns nun
‫eingehend mit der eigentlichen Fehlerbehandlung befassen, schreiben wir
‫zunächst einen Handler für undefinierte Routen.
‫Also im Grunde für Routen, denen wir noch keinen
‫Handler zugewiesen haben.
‫Und zuerst müssen wir hier unsere Anwendung starten,
‫die wir nach der letzten Debug-Sitzung nicht beendet haben.
‫Also MPM starten.
‫Warten wir also auf eine Datenbankverbindung.
‫Hier ist es, also gehen wir jetzt zum Postman hier und versuchen, die Route
‫zu treffen, die wir noch nicht definiert haben.
‫Also kopiere ich einfach diese URL
‫hierher, in Ordnung, und sagen
‫wir zum Beispiel, dass
‫wir
‫anstelle von apiV1-Touren nur api/tours sagen würden.
‫Okay, in diesem Fall würden wir dieses HTML-Ergebnis
‫erhalten, in Ordnung, also sendet
‫Express automatisch diesen HTML-Code hierher, zusammen mit
‫einem 404 Not Found-Fehlercode, falls es
‫keinen Handler für die angeforderte Route gibt, okay.
‫Oder wir könnten hier zum Beispiel Tour auch einfach falsch schreiben.
‫In diesem Fall würden wir zum Beispiel
‫immer noch den gleichen Fehler erhalten.
‫Jetzt gibt es auch noch eine andere
‫Situation, wenn wir hier nach Touren etwas anderes angeben,
‫sagen wir einfach so.
‫Schauen wir uns also den Fehler an, den wir
‫erhalten, und jetzt erhalten wir, dass die Umwandlung in die Objekt-ID fehlgeschlagen ist.
‫Und das liegt daran, dass
‫wir hier nach der Tour eine Route haben, die einen ID-Parameter akzeptiert, richtig.
‫Und so versucht MongoDB im Grunde, ein Dokument
‫mit dieser ID zu finden, kann es aber nicht in
‫eine gültige MongoDB-Objekt-ID konvertieren.
‫Das ist also wieder eine andere Situation, lassen Sie uns einfach
‫weiter mit dieser arbeiten, also wieder, wo wir diesen
‫Fehler erhalten, aber in diesem HTML-Formular.
‫Da wir hier eine API erstellen,
‫macht es nicht viel Sinn, HTML zurückzusenden, richtig, also beheben
‫wir das jetzt und erstellen im Grunde eine Handle-Funktion
‫für alle Routen, die nicht von unseren Routern zwischengespeichert werden.
‫Okay, also kehren wir hier zu unserer Anwendung zurück und
‫öffnen die App. js.
‫Okay, das ist im Grunde
‫die Definition unserer Express-Anwendung.
‫Bevor wir etwas anderes tun, wollen wir
‫diese Middleware hier wirklich loswerden, die wir
‫nicht mehr brauchen.
‫Wir haben dies hier nur verwendet, um
‫das Konzept der Middleware zu demonstrieren, und brauchen das an
‫dieser Stelle nicht mehr.
‫Nun gut, wie implementieren wir einen
‫Route-Handler für eine Route, die von keinem unserer
‫anderen Route-Handler zwischengespeichert wurde?
‫Denken Sie also daran, dass alle diese Middleware-Funktionen
‫in der Reihenfolge ausgeführt werden, in der sie sich im Code befinden.
‫Die Idee ist also, dass, wenn wir eine Anfrage
‫haben, die es bis zu diesem Punkt unseres Codes
‫schafft, dies bedeutet, dass weder der
‫tourRouter noch der userRouter in der Lage waren, sie zwischenzuspeichern, okay.
‫Wenn wir also hier nach diesen Routern eine Middleware hinzufügen, wird
‫sie nur dann wieder erreicht, wenn sie von keinem
‫unserer anderen Router bearbeitet wird, okay.
‫Also lassen Sie uns das tun und dann wirklich verstehen, wie es
‫funktioniert, nachdem es bereits implementiert wurde.
‫Also implementieren wir einen Route-Handler
‫und sagen app.
‫und nun die HTTP-Methode, für die
‫wir die Route angeben möchten.
‫Jetzt könnten wir get here right verwenden, also genau wie
‫zuvor, aber was ist dann mit Post-Requests,
‫Lösch- oder Patch-Requests?
‫Sie müssten dann auch Handler für diese schreiben,
‫und das wollen wir nicht, wir wollen
‫einfach alle Routen, also alle URLs, für alle Verben hier in
‫diesem einen Handler verarbeiten, okay.
‫Und so können wir in Express die App verwenden. alle.
‫Und das wird dann für alle Verben
‫ausgeführt, also für die gesamte HTTP-Methode, in Ordnung.
‫Als nächstes geben wir die URL an, und
‫da wir hier alle URLs behandeln wollen,
‫die nicht behandelt wurden, können wir hier den Stern
‫verwenden, der für alles steht, gut, und der Rest ist
‫dann nur eine normale Middleware-Funktion , So
‫wie vorher.
‫Also
‫Anfrage, Antwort und weiter.
‫Okay, und was wollen wir hier machen?
‫Nun, wir möchten einfach eine Antwort
‫im JSON-Format zurücksenden, also nicht im HTML, das wir gerade haben.
‫Also res. status,
‫und hier setzen wir einen 404, also Not Found
‫und dann eine JSON-Antwort, also genau wie die übliche, bei der
‫wir den Status auf fehlschlagen setzen.
‫Also nur eine normale angrenzende formatierte Antwort.
‫Und dann eine Art Nachricht hier, und tatsächlich lassen
‫Sie uns hier einen Vorlagenstring
‫erstellen, weil ich dort eine Variable einfügen möchte.
‫Kann also nicht
‫finden.
‫Und dann können wir req verwenden. originalUrl okay, das ist
‫also eine Eigenschaft, die wir auf der Anfrage haben,
‫die, wie der Name schon sagt, die angeforderte URL ist, in
‫Ordnung.
‫Diese neue Antwort, die wir jetzt
‫zurücksenden, ist also viel besser als der
‫HTML-Code, den wir zuvor erhalten haben, also testen wir das jetzt.
‫Und tatsächlich bekommen wir jetzt hier eine JSON-Fehlermeldung zurück.
‫Hier erhalten wir also auch die angeforderte URL, und
‫zwar diejenige, auf die wir
‫versucht haben zuzugreifen, aber sie ist nicht verfügbar, gut, toll.
‫Nun nochmal, warum hat das funktioniert?
‫Die Idee ist also wieder, dass, wenn wir diesen Punkt
‫hier erreichen können, dies bedeutet, dass der Anfrage-Antwort-Zyklus
‫zu diesem Zeitpunkt in
‫unserem Code noch nicht abgeschlossen war, richtig.
‫Denken Sie daran, dass Middleware dem Middleware-Stack in der
‫Reihenfolge hinzugefügt wird, in der sie hier
‫in unserem Code definiert ist.
‫Im Grunde läuft dieser Code hier zuerst,
‫und wenn die Route hier in unserem tourRouter
‫abgeglichen würde, würde unsere Anfrage diesen Code nie erreichen
‫und dann würde dies nicht ausgeführt.
‫Und so sollte dies im Grunde der letzte
‫Teil nach all unseren anderen Routen sein, in Ordnung.
‫Und wenn ich das nur
‫zum Ausprobieren wäre, schreibe das jetzt ganz
‫oben in unsere Bewerbung, dann wirst du sehen, dass
‫wir, egal welche Anfrage wir machen werden, immer dieselbe Antwort erhalten.
‫Gut, also testen
‫wir das, und tatsächlich erhalten wir jetzt eine
‫JS-Fehlermeldung, und das liegt daran,
‫dass jetzt alle Anfragen diesen Routenhandler hier erreichen, und
‫es wird tatsächlich abgeglichen, weil es eine GET-Anfrage ist, die Teil aller
‫Verben ist, richtig, und dann alle Routen, also alle URLs
‫werden hier zwischengespeichert, und natürlich verarbeitet es
‫diese URL, die wir gerade hier gemacht haben.
‫Und das gleiche natürlich auch, zum Beispiel für eine Löschtour.
‫Also würde das gleiche passieren, wir würden
‫immer die gleiche Antwort bekommen,
‫in Ordnung.
‫Also legen wir es natürlich zurück,
‫aber das war nur, um zu zeigen, wie und warum
‫das funktioniert.
‫Großartig, also ist dies ein wichtiger Teil, um unsere API
‫ein wenig benutzerfreundlicher zu machen, aber als nächstes wollen wir
‫uns nun mit der echten Fehlerbehandlung vertraut machen.