‫Männlicher Ausbilder: Lassen Sie
‫uns nun endlich die Validierungsfehler von Mongoose behandeln.
‫Erinnern Sie sich also daran, wie wir versucht haben, eine Tour
‫mit ungültigen Daten hier zu
‫aktualisieren, und dann diese Art von Fehler erhalten haben?
‫Okay.
‫Und versuchen wir tatsächlich, noch einen hinzuzufügen.
‫Also ein Name, der wirklich kurz ist, okay?
‫Und weil das wieder nicht erlaubt ist.
‫Oh, und jetzt können wir unseren Fehler tatsächlich nicht mehr sehen,
‫weil wir jetzt in der Produktion sind.
‫Und natürlich wird dieser Fehler im
‫Moment nicht richtig behandelt.
‫Es ist nicht als betriebsbereit gekennzeichnet.
‫Denken
‫Sie also daran, dass wir diese Art von generischen Fehlermeldungen zurückbekommen.
‫Okay?
‫Um also den Fehler zu sehen, den wir zuvor hatten,
‫kehren wir schnell zur Entwicklung zurück.
‫Also npm starten.
‫Und senden Sie es
‫jetzt erneut.
‫Und jetzt bekommen wir unsere Entwicklungsfehler zurück, okay?
‫Denn jetzt möchte
‫ich Ihnen zeigen, wie wir aus all dem, was wir
‫hier haben, tatsächlich eine sinnvolle Fehlermeldung erstellen können.
‫Jetzt rechts.
‫Innerhalb unseres Fehlers
‫erhalten wir also Fehlereigenschaften.
‫Und diese Eigenschaft selbst ist
‫ein Objekt, das viele Objekte enthält, und
‫jedes davon ist für eines der Felder, das einen Fehler enthält.
‫Gut?
‫Der erste hier ist also für die Länge der Tour.
‫Dann ist der zweite wegen der Schwierigkeit,
‫das ist auch falsch.
‫Und der dritte ist für die Bewertung, okay?
‫Jeder von diesen hat also tatsächlich eine nette Fehlermeldung, okay?
‫Im Grunde also diejenige, die wir in unserem Mongoose-Schema definiert haben.
‫Und jetzt wollen wir diese drei
‫Nachrichten von hier extrahieren
‫und sie alle in eine Zeichenfolge bringen, in Ordnung?
‫Also lass uns weitermachen und das tun.
‫Okay.
‫Und wieder
‫werde ich damit beginnen, die Bedingung hier unten zu erstellen.
‫Also if(error),
‫und sehen wir uns das an.
‫Hier haben wir also den Fehler.
‫Wir haben die Fehler, alle.
‫Und ich muss hier scrollen.
‫Und ja, hier ist der Name.
‫Also Fehler. Name ist ValidationError, in Ordnung?
‫Also greifen wir das an.
‫Okay.
‫Dies ist also wieder ein Fehler, der von Mongoose erstellt wurde.
‫Also genau wie der
‫erste, und so sehen sie ähnlich aus, okay.
‫Jetzt will ich das hier nicht.
‫Aber stattdessen möchte
‫ich, dass der Fehler handleValidationErrorDB entspricht
‫und den Fehler einsenden, okay?
‫Lassen Sie uns das jetzt noch einmal kopieren.
‫Gut.
‫Und lassen Sie uns noch einmal beginnen, indem Sie unsere Nachricht erstellen.
‫Ungültige Eingabedaten.
‫Und dann geben wir auch den Fehler zurück.
‫Also neuer AppError(Nachricht, 400).
‫VS Code hat also
‫bereits erkannt, dass ich genau das eingeben wollte, in Ordnung?
‫Um nun aus allen
‫Strings aus allen Fehlern einen großen String
‫zu erstellen, müssen wir im Grunde alle
‫diese Objekte durchlaufen und dann alle Fehlermeldungen in ein neues Array extrahieren.
‫Schauen wir uns das also noch einmal an.
‫Okay.
‫Das Objekt, das alle Objekte enthält,
‫weist also Fehler auf, okay?
‫Wir haben also einen Fehler für den Namen, einen für
‫den Schwierigkeitsgrad und einen für die durchschnittlichen Bewertungen.
‫Und so werden wir dieses Fehlerobjekt im Grunde durchschleifen.
‫Okay?
‫Und in JavaScript verwenden wir Object. Werte, um
‫im Grunde über ein Objekt zu schleifen.
‫Also die Elemente eines Objekts.
‫Gut?
‫Lassen Sie uns hier eine Variable namens error erstellen,
‫die vorerst wieder ein
‫Array aller Fehlermeldungen ist,
‫und jetzt Object. Werte.
‫Und so wollen wir die Werte von err. Fehler, in Ordnung?
‫Und jetzt überfliege sie mit einer Karte.
‫Und dann geben
‫wir in jeder Iteration einfach die Fehlermeldung zurück, okay?
‫Nur um sicherzustellen, dass wir hier alle auf derselben
‫Seite sind, dem Objekt. Werte sind diese Objekte, okay?
‫Also dieses Objekt und dieses Objekt und das nächste, okay?
‫Das sind also die Werte.
‫Um die Botschaft
‫zu extrahieren, müssen wir jetzt nur
‫noch den Wert sagen. Nachricht, okay?
‫So . Botschaft.
‫Also im Grunde genommen der aktuelle Wert,
‫oder sagen wir das
‫aktuelle Element, ich verwende dafür gerne element,
‫und wir möchten el zurückgeben. Botschaft.
‫Okay.
‫Und das sollte jetzt natürlich nicht hier sein.
‫Und das war Ihnen wahrscheinlich auch schon aufgefallen.
‫Also eigentlich wollen wir das hier, okay?
‫Und jetzt müssen
‫wir das nur noch in unseren Nachrichtenstring einfügen, in Ordnung?
‫Also Fehler, und jetzt fügen wir sie einfach alle zu einer
‫Zeichenfolge zusammen, indem wir einen Punkt und dann ein Leerzeichen verwenden, okay?
‫Und Sie werden gleich sehen, warum das so ist.
‫Gut.
‫Also schalten wir hier zurück zur Produktion.
‫Führen Sie also unser Produktionsstartskript aus.
‫Versuchen Sie es jetzt noch einmal und warten wir darauf,
‫und bam!
‫Auf geht's!
‫Also ungültige Eingabedaten.
‫Dann muss die erste Fehlerzeichenfolge mehr
‫oder gleich 10 Zeichen haben.
‫Dann der
‫zweite und der dritte.
‫Perfekt.
‫Und deshalb habe ich den Punkt und das Leerzeichen verwendet, okay?
‫Also um diese drei Strings im Grunde durch einen Punkt
‫und ein Leerzeichen zu trennen, in Ordnung?
‫Und das sieht jetzt nach einer sehr
‫schön formatierten Fehlermeldung aus, die jeder leicht verstehen kann.
‫Rechts?
‫Also, wir sind im Grunde hier fertig.
‫Gut.
‫Jetzt hätten wir diesen Fehler, den Handhabungsfehler,
‫noch viel vollständiger machen können.
‫Zum Beispiel könnten wir verschiedene Fehlerschweregrade definieren, wie zum Beispiel: Dieser
‫Fehler ist nicht so wichtig,
‫dieser Fehler ist mittelschwer
‫und dieser Fehler ist sehr wichtig oder sogar kritisch.
‫Und wir könnten dann auch einigen Administratoren über kritische
‫Fehler eine E-Mail senden.
‫Und wirklich, es gibt eine Menge Dinge, die wir umsetzen könnten.
‫Aber noch einmal, in einer Art kleiner Anwendung wie dieser ist
‫das, was wir hier haben, schon richtig gut, okay?
‫Das ist also schon eine ziemlich robuste
‫Strategie, die wir hier
‫umgesetzt haben, und ich bin wirklich zufrieden damit, okay?
‫Diese ganze Logik hier mit den Bedienungsfehlern, die
‫wir hier implementiert
‫haben, ist also schon ziemlich ausgefeilt.
‫Okay?
‫Sollten wir nun jemals einen weiteren Fehler
‫finden, den wir als funktionsfähig
‫markieren möchten, müssten
‫wir natürlich nur etwas Ähnliches wie hier tun, okay?
‫Implementieren Sie also im Grunde eine andere Funktion dafür
‫und geben Sie dann unseren eigenen
‫Betriebsfehler zurück, damit die Sendefehlerproduktion
‫diesen Betriebsfehler dann tatsächlich an den Client
‫senden kann, richtig?
‫Okay, und damit
‫ist unser Fehlercontroller eigentlich fertig.
‫Aber es gibt noch einige andere Fehler, die
‫wir behandeln müssen, die komplett außerhalb von Mongo oder sogar Express liegen.
‫Und das machen wir im Rest dieses Abschnitts.