‫Kursleiter: Mongoose bietet uns Entwicklern
‫also sehr leistungsfähige Möglichkeiten zur Validierung
‫von Daten, die in unser Modell eingehen.
‫In diesem Video erfahren
‫Sie alles über die Datenvalidierung mit Mongoose.
‫Was genau bedeutet nun Validierung?
‫Bei der Validierung wird im Wesentlichen geprüft, ob
‫die eingegebenen Werte für jedes Feld
‫in unserem Dokumentschema das richtige Format haben und
‫ob tatsächlich Werte für alle erforderlichen Felder eingegeben wurden.
‫Auf der anderen Seite haben wir jetzt auch
‫eine Bereinigung, die sicherstellen soll, dass die eingegebenen Daten
‫grundsätzlich sauber sind, sodass kein Schadcode in
‫unsere Datenbank oder in
‫die Anwendung selbst eingeschleust wird.
‫In diesem Schritt entfernen wir also unerwünschte
‫Zeichen oder sogar Code aus den Eingabedaten, in Ordnung?
‫Und dies ist tatsächlich ein entscheidender
‫Schritt, etwa ein goldener Standard in der Backend-Entwicklung.
‫Um niemals Eingabedaten von einem Benutzer so
‫zu akzeptieren, wie sie sind.
‫Daher müssen wir diese eingehenden Daten immer bereinigen.
‫Aber wie auch immer, ich überlasse die
‫Datenbereinigung dem Sicherheitsteil des Kurses,
‫damit wir uns
‫in dieser Vorlesung ganz auf die Datenvalidierung konzentrieren können.
‫Und wir führen diese Datenvalidierung direkt
‫hier am Modell durch.
‫Und das liegt wiederum an der Philosophie des
‫fetten Modells und des
‫dünnen Controllers, die das Modell zum
‫perfekten Ort für die Validierung macht, oder?
‫Und tatsächlich wird Mongoose bereits mit
‫einer Reihe von Validierungstools ausgeliefert.
‫Lassen Sie uns hier nun tatsächlich eine Datenvalidierung durchführen.
‫Und tatsächlich haben wir es bereits getan.
‫Also, wenn wir diese Anforderung hier verwendet haben, ist das
‫eigentlich schon ein eingebauter Datenvalidator, in Ordnung?
‫Sie sehen also, dass wir hier in den Schematypoptionen
‫einen Validator verwenden, wie er erforderlich ist.
‫Und erforderlich ist eigentlich für alle Datentypen verfügbar.
‫Also nicht nur Saiten, sondern wirklich alles.
‫Zahlen, Boolesche Werte, Datumsangaben oder was auch
‫immer Sie verwenden.
‫Dann haben wir auch hier ein Unikat, aber
‫bitte beachten Sie, dass dies technisch gesehen kein Validator ist.
‫Es wird immer noch einen
‫Fehler erzeugen, wenn wir einen doppelten Namen
‫haben, aber auch hier ist dies nicht wirklich ein Validator, in Ordnung?
‫Erforderlich ist jedoch ein Validator, und deshalb
‫zeige ich Ihnen jetzt einen anderen, der
‫speziell nur für Zeichenfolgen gedacht
‫ist, und zwar als maximale Länge und auch als Mindestlänge.
‫Wir haben also die
‫maximale Länge und wie der Name schon sagt, verwenden wir
‫dies, um die maximale Länge anzugeben, die ein String haben kann.
‫Und wenn es länger ist, dann
‫wird es einen Fehler produzieren, in Ordnung?
‫Machen wir das also genau wie zuvor mit
‫required, wo wir ein Array angegeben und dann den Wert festgelegt haben.
‫Nehmen wir also an, wir wollen 40 als maximale Stringlänge
‫und fügen dann den Fehler danach hinzu.
‫Also im Grunde die Fehlermeldung, die wir erhalten.
‫Ein Tourname darf also höchstens 40
‫Zeichen lang sein.
‫Okay, das ist also die maximale Länge, und
‫dann haben wir auch die minimale Länge.
‫In Ordnung, und setzen wir das auf
‫10, also muss ein Tourname mehr oder gleich 10 Zeichen haben.
‫Okay, und so haben wir diese beiden Validatoren, die
‫eigentlich nur für Strings verfügbar sind, okay?
‫Und so lassen Sie uns jetzt wirklich weitermachen und das versuchen.
‫Also werde ich hier eine neue Tour erstellen.
‫Und das ist keine geheime Tour,
‫aber der Rest spielt hier keine Rolle.
‫Ich nenne das einfach eine Testtour und mal
‫sehen, wie viele Charaktere wir haben,
‫also vier plus eins plus vier, also
‫haben wir nur neun Charaktere.
‫Daher sollten wir jetzt damit rechnen, tatsächlich einen Fehler zu erhalten.
‫Also, lass uns das ausprobieren.
‫Und tatsächlich muss ein Tourname
‫mehr oder gleich 10 Zeichen lang sein.
‫Großartig, aber was ist jetzt mit der Aktualisierung von Touren?
‫Also, lass uns hier einen davon besorgen.
‫Wir haben also diese Testtour zwei hier, also versuchen
‫wir, diese zu aktualisieren.
‫Also gehen wir zu unserer Update-Tour-Route.
‫Und jetzt lassen Sie uns hier den Namen in Test ändern, die
‫Anfrage senden und wir erhalten den gleichen Fehler.
‫Dies funktioniert jetzt nur aufgrund einer
‫Einstellung, die wir bei
‫der Implementierung dieses Aktualisierungshandlers weit zurück gesetzt haben.
‫Lassen Sie mich Ihnen das also schnell im Tourcontroller zeigen.
‫Löschen und aktualisieren, und so ist es wegen
‫dieser Option hier runValidators, auf
‫true gesetzt, dass die Validatoren erneut ausgeführt werden.
‫Wenn ich es
‫jetzt auf false setze, dann sollte Mongoose diesen Namen gerne annehmen.
‫Und das tut es tatsächlich.
‫Also, lass es uns auf etwas
‫längeres zurücksetzen, es
‫spielt keine Rolle, okay, und wenn ich es zurück auf
‫true setze, dann sollte es
‫es nicht akzeptieren, und tatsächlich bekommen wir unseren Fehler zurück, in Ordnung?
‫Ich wollte Ihnen
‫nur schnell die Tatsache dieser Einstellung zeigen.
‫In Ordnung, und so, ja, diese funktionieren jetzt.
‫Lassen Sie uns hier ein paar weitere Validatoren ausprobieren.
‫Zum Beispiel jetzt auf Zahlen.
‫Kommen wir also zum Durchschnitt der Bewertungen.
‫Und wir wissen, dass die
‫Bewertung immer zwischen eins und null liegen muss, und wir wissen, dass
‫eine Bewertung immer zwischen eins und fünf liegen muss, okay?
‫Und so haben wir, sehr ähnlich wie bei der Mindest-
‫und Höchstlänge, bei Zahlen einfach Min und Max.
‫Also, das Minimum, das wir wollen, ist eins
‫und dann wieder unsere Fehlermeldung.
‫Die Bewertung muss also über 1 liegen. 0, sagen wir.
‫Und dann ist das Maximum fünf.
‫Muss unter 5 sein. 0, okay, und lass uns
‫das auch schnell testen.
‫Wenn wir also eine neue Tour erstellen, nennen wir sie Test Tour
‫Amazing, weil sie eine durchschnittliche Bewertung von sechs hat.
‫Okay, mal sehen, was dann passiert,
‫und tatsächlich muss die Bewertung unter fünf liegen.
‫Okay, das geht wieder nicht
‫und kann natürlich auch nicht Null sein.
‫Also muss es über eins sein, und
‫mit vier wird es natürlich funktionieren, und hier ist tatsächlich unsere Tour.
‫Als nächstes möchte ich diesen Schwierigkeitswert hier auf
‫nur drei Schwierigkeiten beschränken.
‫Also einfach, mittel und schwer.
‫Und wenn der Benutzer etwas anderes eingibt,
‫wird es nicht funktionieren.
‫Also, lass uns das ausprobieren.
‫Der Validator, den wir dafür verwenden, heißt enum, okay, und
‫hier können wir im Grunde
‫genommen ein Array der zulässigen Werte übergeben.
‫Wir haben also leicht, mittel und schwer.
‫Okay, jetzt wollen wir hier auch unsere Fehlermeldung angeben,
‫aber das geht im Moment nicht wirklich, oder?
‫Ich meine, wenn wir hier ein weiteres Argument
‫hinzufügen, dann wäre das
‫nicht für die Fehlermeldung, sondern natürlich für einen weiteren möglichen Wert, okay?
‫Die Lösung, die wir hier tun
‫müssen, besteht darin, hier noch ein weiteres Objekt
‫zu erstellen und dann anzugeben, dass dies hier die Werte sind.
‫Und dann unsere Nachricht, in Ordnung?
‫Und so funktioniert es tatsächlich.
‫Diese Notation hier ist wirklich nur
‫eine Abkürzung für dieses vollständige Objekt hier, in Ordnung?
‫Der Schwierigkeitsgrad ist also entweder: leicht, mittel oder schwer.
‫Okay, und das ist ein sehr schöner, sehr praktischer Validator, der automatisch für
‫alle Strings verfügbar ist, okay, also versuchen Sie nicht,
‫diesen hier zum Beispiel für Zahlen zu verwenden.
‫Dies ist nur für Saiten.
‫Und übrigens, diese Min und Max hier
‫sind eigentlich nicht nur für
‫Zahlen, sondern es wird auch mit Datumsangaben funktionieren, in Ordnung?
‫Wie auch immer, lassen Sie uns das jetzt endlich auch testen.
‫Wir müssen also den Namen ändern, und hier
‫fügen wir etwas anderes hinzu,
‫in Ordnung, und so erhalten wir tatsächlich unseren Fehler.
‫Wenn wir jetzt einfach sagen, dann funktioniert es.
‫Okay, und das war eigentlich alles, was ich
‫Ihnen hier in diesem
‫Vortrag zeigen wollte, aber es gibt tatsächlich noch eine Menge anderer Validatoren.
‫Für Strings haben Sie beispielsweise einen Match-Validator, um
‫zu überprüfen, ob die
‫Eingabe mit einem bestimmten regulären Ausdruck übereinstimmt.
‫Aber ich glaube, dass diese, die ich Ihnen hier gerade
‫gezeigt habe, die wichtigsten eingebauten Validatoren sind.
‫Und für eine vollständige Liste
‫aller davon können Sie natürlich jederzeit die Dokumentation lesen.
‫Jetzt können wir auch unsere eigenen Validatoren spezifizieren und
‫genau das werden wir im nächsten
‫Video gleich machen.