‫Kursleiter: Als nächstes sprechen wir über benutzerdefinierte Validatoren.
‫Manchmal reichen die eingebauten Validatoren einfach nicht aus.
‫Und in
‫diesem Fall können wir auch unsere eigenen kundenspezifischen Validatoren bauen.
‫Und ein Validator ist eigentlich nur eine einfache Funktion, die
‫entweder true oder false zurückgeben sollte.
‫Und wenn es false zurückgibt, bedeutet dies, dass ein Fehler vorliegt.
‫Wenn wir andererseits true zurückgeben,
‫ist die Validierung korrekt
‫und die Eingabe kann akzeptiert werden.
‫Okay, also lassen Sie uns jetzt hier einen einfachen benutzerdefinierten Validator erstellen.
‫Und was ich überprüfen möchte, ist, ob der Preisnachlass tatsächlich
‫niedriger ist als der Preis selbst.
‫Das ist etwas, was wir
‫mit den eingebauten Validatoren nicht tun
‫können, also bauen wir einfach unsere eigenen.
‫Wir müssen hier nun ein Objekt
‫für die SchemaType-Optionen angeben.
‫In Ordung.
‫Der Typ ist also Zahl,
‫und um unseren Validator anzugeben, verwenden
‫wir die Eigenschaft validieren.
‫Validieren und dann, wie gesagt,
‫eine einfache Callback-Funktion.
‫Und wieder keine Pfeilfunktion, sondern eine
‫echte Funktion, denn in
‫dieser Funktion
‫haben wir Zugriff auf die Variable this,
‫die auf das aktuelle Dokument zeigt.
‫Wenn Sie die Variable this nicht benötigen,
‫können Sie natürlich einfach eine Pfeilfunktion verwenden.
‫Wir haben eine
‫Callback-Funktion, und diese Callback-Funktion hat tatsächlich
‫Zugriff auf den eingegebenen Wert.
‫In diesem Fall also der Preisnachlass, den der Benutzer angegeben hat.
‫So nenne ich den Wert, kurz val.
‫Denken Sie daran, dass wir von
‫diesem Validator entweder true oder false zurückgeben müssen.
‫Wann möchten wir
‫false und wann true zurückgeben?
‫Nun, wir wollen einen Fehler, wenn der Preisrabatt
‫größer oder gleich dem Preis ist.
‫Was wir hier also im Grunde zurückgeben
‫möchten, ist der Test zum Testen, ob
‫der Wert darunter liegt. Preis.
‫In Ordnung, nehmen wir an, der Preisnachlass beträgt 100
‫und der tatsächliche Preis beträgt 200.
‫100 ist kleiner als 200, das ist wahr und daher haben wir keinen Fehler.
‫Und das macht Sinn, denn genau das wollen wir.
‫Der Preisnachlass sollte immer niedriger sein.
‫Auf der anderen Seite, wenn der Rabatt 250 beträgt, stellt sich
‫heraus, dass dies falsch ist.
‫Und dann wird false, denk daran, einen Validierungsfehler auslösen.
‫Lassen Sie es uns jetzt tatsächlich testen.
‫Preis (Klackern der Tastatur) und
‫Preisnachlass.
‫Und lassen Sie uns die Werte verwenden, die wir
‫zuvor verwendet haben, und ich muss hier auch den Namen ändern.
‫Okay, im Moment ist unser Rabatt größer als der Preis und wir
‫sollten unseren Fehler bekommen.
‫Okay, und tatsächlich haben wir einen Validierungsfehler.
‫Also für Pfadpreisrabatt gescheitert.
‫Jetzt haben wir hier keine benutzerdefinierte Nachricht und lassen
‫Sie uns das schnell beheben.
‫Alles klar, und die Art und Weise, wie wir dies tun, ist
‫sehr ähnlich wie bei der enum.
‫Wir müssen also tatsächlich ein anderes Objekt angeben
‫und dann die Message-Eigenschaft festlegen.
‫Validate
‫sollte ein Objekt sein
‫und dann haben wir unsere Nachricht
‫drin und diese Funktion hier wird
‫in einer Eigenschaft namens validator leben.
‫Okay und unsere Nachricht hier
‫wird sein (Tastaturklackern) Der Rabattpreis sollte
‫unter
‫dem
‫regulären Preis liegen.
‫Hier brauchen wir ein Komma und jetzt sind wir gut.
‫Und eigentlich ist ein ganz netter Trick, dass diese Nachricht hier
‫auch Zugriff auf den Wert hat.
‫Und das funktioniert auf eine seltsame Art und Weise
‫und das ist wirklich intern von Mongoose, also
‫hat das nichts mit JavaScript
‫zu tun, also kann ich hier einfach die geschweiften Klammern verwenden und dann bewerten.
‫Dieses Stück hier erhält also Zugriff
‫auf den eingegebenen Wert,
‫hat also genau den gleichen Wert wie diese val-Variable.
‫Lassen Sie uns
‫das also noch einmal testen und jetzt
‫erhalten wir tatsächlich unsere Nachricht und sogar Zugriff auf den 250-Preis, den wir hier angegeben haben.
‫Jetzt ändern wir es auf 100 und jetzt sollte es funktionieren
‫und ja, das tut es.
‫So großartig.
‫Nun gibt es eine sehr wichtige Einschränkung,
‫die wir hier beachten
‫müssen, und zwar innerhalb einer Validator-Funktion, dass
‫dieses Schlüsselwort nur auf das aktuelle
‫Dokument verweist,
‫wenn wir ein neues Dokument erstellen.
‫Diese Funktion hier wird also beim Update nicht funktionieren.
‫Und das ist sehr wichtig zu beachten.
‫Sie sehen, dass es in Mongoose ein paar Vorbehalte
‫gibt, die Sie wirklich beachten
‫müssen, wenn Sie damit arbeiten.
‫Und das alles habe ich aus
‫Erfahrung gelernt und kann es Ihnen deshalb jetzt erzählen.
‫Also habe ich einmal einen Fehler mit diesem und
‫von diesem Zeitpunkt
‫an weiß ich, dass ich diese Art von Validator
‫mit einem this-Schlüsselwort nur verwenden
‫kann, wenn ich tatsächlich neue Dokumente erstelle.
‫Also lass mich das hier für dich aufschreiben.
‫(Tastatur klackert) In Ordnung, ich hoffe,
‫dass Sie all diese sehr wichtigen
‫kleinen Informationen, die sehr wichtig sind, zur
‫Kenntnis nehmen.
‫Das gleiche hier unten.
‫Denken Sie daran, wo ich
‫Ihnen gesagt habe, dass diese DOCUMENT MIDDLEWARE nur zum Speichern
‫und Erstellen, aber nicht zum Aktualisieren läuft.
‫Und das ist eines dieser
‫anderen Dinge, die man nie vergessen sollte.
‫Nun, in diesem speziellen Fall
‫hier gibt es tatsächlich Möglichkeiten, dies zu beheben, aber sie
‫sind sehr kompliziert und es lohnt sich nicht wirklich, sie weiterzuverfolgen.
‫Und wir könnten natürlich auch Validierungsfunktionen schreiben, die
‫nicht auf diese Variable angewiesen sind.
‫In diesem Fall brauchen wir es also nur,
‫weil wir einen Wert mit dem Wert eines anderen Felds vergleichen.
‫Dies ist ein benutzerdefinierter Validator, den wir in Mongoose verwenden
‫können und den wir selbst geschrieben haben.
‫Aber es gibt auch ein paar Bibliotheken
‫auf npm für die Datenvalidierung, die wir hier einfach
‫als benutzerdefinierte Validatoren einfügen können, die wir nicht selbst schreiben müssen.
‫Und die beliebteste Bibliothek heißt Validator, also
‫werfen wir einen Blick darauf.
‫Validator und dann suche ich nach
‫GitHub, weil normalerweise alle diese Bibliotheken immer auf GitHub sind.
‫Und die Dokumentation wird auch da
‫sein und hier sehen
‫Sie, dass
‫der Validator eine Bibliothek von String-Validatoren und Desinfektionsmitteln ist.
‫Sie sehen auch, dass es mit 13,00 Sternen recht beliebt
‫ist und
‫das ist sehr gut.
‫Wir sehen auch, dass diese Bibliothek
‫nur Zeichenfolgen validiert und bereinigt.
‫Hier ist dann all das Zeug, wie wir es
‫installieren und wie wir es verwenden, aber das ist ziemlich einfach.
‫Das wissen wir schon.
‫Aber was ich Ihnen zeigen
‫möchte, ist die Liste aller verfügbaren Validatoren.
‫Zum Beispiel haben wir isAlpha,
‫das überprüft, ob die Zeichenfolge nur Buchstaben enthält.
‫Wir haben Alphanumerik, also nur Buchstaben und Zahlen, und wir
‫haben hier wirklich viel Zeug.
‫Überprüfen Sie also, ob eine
‫Zeichenfolge boolisch ist, oder prüfen Sie, ob die Zeichenfolge
‫eine Kreditkarte ist, also eine gültige Kreditkartennummer.
‫Oder ob es sich um eine
‫Währung handelt oder Sie wirklich alle möglichen verschiedenen Tests sehen.
‫Zum Beispiel eine ISBN, also zum Prüfen von Buchnummern.
‫Um zu testen, ob es sich um eine ganze Zahl handelt oder ob die Zeichenfolge klein geschrieben ist.
‫Sie sehen also, wann immer Sie eine Datenvalidierung benötigen,
‫können Sie eine dieser Bibliotheken
‫greifen und sie einfach in Ihre Mongoose-Validatoren stecken.
‫Nun, viele der Dinge,
‫die hier sind, sind tatsächlich bereits
‫in Mongoose integriert und wir brauchen sie nicht
‫alle, okay, aber es gibt eine
‫sehr spezifische, die ich verwenden möchte, nämlich Alpha.
‫Ich möchte also prüfen, ob der Tourname nur Buchstaben enthält.
‫Und dafür kann ich diese Funktion
‫aus der Validator-Bibliothek verwenden.
‫Gehen wir
‫zurück und beginnen
‫mit
‫der Installation von
‫npm i (Keyboard
‫Clacking) Validator.
‫Das war erfolgreich.
‫Dann muss ich
‫es hier importieren und jetzt können wir es hier tatsächlich verwenden.
‫Ich werde es
‫hier und da verwenden, ich verwende die Eigenschaft
‫validieren und jetzt muss
‫ich nur noch die Funktion hier wirklich einfügen.
‫Und in validator funktioniert es so, wo
‫validator ein Objekt ist und
‫dort haben wir dann all diese Methoden.
‫Der Validator ist
‫Alpha, also
‫wählen
‫wir ihn einfach aus
‫der Dokumentation aus.
‫Und das ist es tatsächlich.
‫Also nennen wir es hier nicht.
‫Wir geben im Grunde nur an,
‫dass dies eine Funktion ist, die verwendet werden sollte.
‫Genau wie unser eigener, wie unser eigener Validator, haben wir ihn
‫nicht genannt.
‫Wir setzen diese Callback-Funktion einfach hier ein,
‫damit sie aufgerufen
‫wird, sobald die Daten validiert werden sollen.
‫Und hier ist es dasselbe.
‫Wenn wir nun eine Fehlermeldung angeben wollen,
‫funktioniert es wie hier oben.
‫Wir können ein Array und dann die Fehlermeldung nach
‫der Callback-Funktion angeben.
‫Und wir hätten es hier unten tun können.
‫Also hier haben wir es anders gemacht.
‫Hier haben wir dann dieses neue Objekt
‫mit Validator und der Nachricht erstellt, aber wir hätten
‫es auch mit einem Array machen können,
‫aber das hätte seltsam ausgesehen.
‫Aber da die Funktion hier oben so
‫klein ist, können wir sie einfach hier einfügen
‫und dann als zweites Argument im Array
‫die Fehlermeldung hinzufügen.
‫Tourname darf
‫nur (Tastaturklackern) enthalten Zeichen.
‫Super, schau dir das an.
‫Zurück in Postman hier, lass uns unseren Preisnachlass loswerden.
‫Und fügen wir hier eine Zahl hinzu.
‫Und damit sollte dann der Test
‫nicht bestehen und tatsächlich darf der Name nur Zeichen enthalten.
‫Lass uns das loswerden.
‫Wir können diesen Namen auch nicht verwenden.
‫Wir haben es schon früher
‫verwendet, so dass das auch hier mit Zeichen ausgeschrieben werden
‫kann und wir diesen Fehler immer noch hier bekommen.
‫Das liegt wohl an den Leerzeichen.
‫Also lass uns einfach die Leerzeichen
‫loswerden, was natürlich nicht wirklich nützlich sein wird
‫und tatsächlich funktioniert es jetzt.
‫Das Problem waren also die Leerzeichen,
‫aber natürlich wollen wir die Leerzeichen hier behalten.
‫Tatsächlich ist dieser Validierungsfehler nicht wirklich nützlich und daher werde
‫ich ihn beseitigen.
‫Bedenken Sie, dass dies hier nur demonstriert wurde, dass
‫wir eine externe Bibliothek wie diese verwenden können,
‫um eine Validierung durchzuführen.
‫Und tatsächlich werden wir diese Bibliothek noch etwas
‫später verwenden, wenn wir überprüfen, ob die Benutzer-E-Mail tatsächlich gültig ist.
‫Das ist also eine weitere
‫nette Funktion, die in dieser Bibliothek enthalten ist.
‫Also nochmal so funktioniert es.
‫In diesem Fall nicht wirklich nützlich.
‫Wenn wir also wirklich testen
‫wollten, ob die Zeichenfolge nur Buchstaben und Leerzeichen enthält, wäre es wahrscheinlich
‫einfacher, einfach einen
‫regulären Ausdruck zu verwenden, um auf diese
‫Art von Muster zu testen.
‫Aber das werde ich
‫hier nicht tun, weil es in diesem
‫Vortrag mehr um diese benutzerdefinierten Validatoren ging.
‫Wie auch immer, mit diesem Vortrag sind wir nun mit
‫der Einführung in Mongoose fertig.
‫Nun, wie Sie sich vorstellen können,
‫gibt es natürlich noch viel über
‫Mungo zu lernen und tatsächlich haben wir etwas später
‫im Kurs einen
‫fortgeschrittenen Mungo-Abschnitt und natürlich werden Sie
‫auch in den anderen Abschnitten
‫immer mehr darüber lernen wie
‫man Mongoose wirklich professionell einsetzt.
‫Bis jetzt hast du schon so viel gelernt,
‫herzlichen Glückwunsch, dass du es bis hierher geschafft hast und es ist
‫schön zu sehen, dass du immer noch bei mir bist.
‫So tolle Arbeit und ich hoffe, Sie bald zu sehen.