Der Express.js-Kurs – Modul 7: Mongoose-Validierung | Shivendra Raghuvanshi | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Der Express.js-Kurs – Modul 7: Mongoose-Validierung

teacher avatar Shivendra Raghuvanshi, Lead Developer and Online Teacher

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Kurseinführung

      1:59

    • 2.

      Validierung in Mongoose implementieren

      7:40

    • 3.

      Integrierte Mongoose-Validatoren verwenden

      5:02

    • 4.

      Benutzerdefinierte Validierungsprogramme in Mongoose erstellen

      3:16

    • 5.

      Validierungsfehler in Mongoose

      3:24

    • 6.

      Schematypoptionen und Anpassungen in Mongoose

      5:36

    • 7.

      Restrukturierung unseres FareWheels-Projekts

      6:14

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

2

Teilnehmer:innen

--

Projekt

Über diesen Kurs

Modul 7: Mongoose-Validierung bietet einen tiefen Einblick in einen der wichtigsten Aspekte der Backend-Entwicklung – die Datenvalidierung. In diesem Modul lernst du, wie du die Integrität und Zuverlässigkeit der Daten deiner Anwendung mit Mongoose sicherstellst. Sie werden integrierte Validatoren kennenlernen, eine benutzerdefinierte Validierungslogik erstellen und Fehler problemlos behandeln. Am Ende dieses Moduls wirst du in der Lage sein, robuste Validierungstechniken zu implementieren, die die Stabilität und Benutzerfreundlichkeit deiner Anwendung verbessern.

Was du lernen wirst

  • Wie man die Validierung in Mongoose-Schemas implementiert, um die Datenintegrität zu gewährleisten.
  • Die integrierten Validatoren von Mongoose nutzen, um Einschränkungen zu erzwingen.
  • Benutzerdefinierte Validatoren erstellen, die auf die spezifischen Anforderungen Ihrer Anwendung zugeschnitten sind.
  • Validierungsfehler effektiv behandeln und darauf reagieren.
  • Schematypoptionen an die Datenanforderungen anpassen.

Außerdem werden wir die FareWheels-Anwendung neu strukturieren, um diese Validierungstechniken in reale Szenarien zu integrieren.

Triff deine:n Kursleiter:in

Teacher Profile Image

Shivendra Raghuvanshi

Lead Developer and Online Teacher

Kursleiter:in
Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Kurseinführung: Willkommen zurück zum Express-JS-Kurs, Modul 7, Mangus-Validierung Dieser Kurs ist eine Fortsetzung der Express JS-Kursreihe Mein Name ist Shawn Raganhi und ich freue mich, Sie durch dieses Modul zu führen dem wir Ihre Rücken - und Entwicklungsfähigkeiten auf die nächste Stufe heben, indem wir die Mangus-Validierung beherrschen In diesem Modul werden wir uns auf die Validierung konzentrieren, einen entscheidenden Aspekt Sie werden lernen, wie Sie die Validierung in Mangos implementieren , um die Datenintegrität sicherzustellen Anschließend lernen Sie, integrierte Validatoren zur schnellen und effektiven Durchsetzung von Einschränkungen zu verwenden und anschließend benutzerdefinierte Validatoren zu erstellen, anschließend benutzerdefinierte Validatoren zu erstellen zugeschnitten sind Danach lernen Sie, mit Validierungsfehlern korrekt umzugehen und darauf zu reagieren und schließlich Schemaoptionen für mehr Flexibilität und Kontrolle anzupassen . Dieses Modul ist ein entscheidender Faktor für Entwickler zuverlässige und skalierbare Anwendungen entwickeln möchten die Mongoose-Validierung beherrschen, können Sie saubereren, fehlerfreien Code schreiben, Fehler reduzieren und sicherstellen, dass Ihre Daten immer konsistent und vertrauenswürdig sind Dies sind einige der grundlegenden Fähigkeiten für die Erstellung produktionsreifer In diesem Modul als Projekt werden wir die Fair Wheels-Anwendung weiter entwickeln. Zunächst werden Sie die API des Unternehmens verbessern , indem das In-Memory-Array durch Mongo DB ersetzen Anschließend erstellen Sie die APA für einen neuen Kunden, einschließlich vollständiger Crowd-Operationen und Validierung Dieses praktische Projekt wird Ihr Verständnis für die Integration der Mongoose-Validierung in reale Anwendungen festigen Integration der Mongoose-Validierung in Dieses Modul steckt voller wertvoller Techniken und praktischer Erfahrung, mit denen Sie bessere Backends erstellen können Lassen Sie uns also eintauchen und Ihre Fähigkeiten zum Glänzen bringen. Wir sehen uns in der ersten Vorlesung. 2. Validierung in Mongoose implementieren: I Das ist also das Kernschema, das wir weiter oben in diesem Abschnitt definiert haben Standardmäßig sind all diese Eigenschaften , die wir hier definieren, optional. Wenn ich also einen Kurs erstelle und all diese Eigenschaften weglasse und dann die Geldbörse in der Datenbank speichere, das eine absolut gültige Operation Mongo DV ist es egal, dass wir einen Kurs haben , der weder einen Namen noch einen Preis In diesem Vortrag werde ich Ihnen zeigen, wie Sie die Validierung implementieren In dieser Demo werde ich nur über den erforderlichen Validator sprechen Aber wir haben noch mehr integrierte Validatoren, über die Sie in der nächsten Vorlesung mehr erfahren werden Vorlesung mehr erfahren Machen wir also diesen Namen erforderlich. Zuerst ersetzen wir hier die Zeichenfolge durch ein Objekt. Wir setzen den Typ auf string und dann auf required, true. Wenn ich also einen Kurs ohne Namen erstelle , lassen Sie uns das hier herausnehmen. ich versuche, diesen Kurs in der Datenbank zu speichern, erhalte ich eine Ausnahme. Lass es mich dir zeigen. Lassen Sie uns also zuerst zum Ende dieser Datei zurückkehren und den Kurs löschen und entfernen. Kommen Sie jetzt rein, erstellen Sie einen Kurs. Jetzt zurück im Terminal, lassen Sie uns die Anwendung ausführen. Ordnung. Schau dir an, was wir haben. Wir haben diesen Variationsfehler. Wenn Sie diesen Fehler sehen, bedeutet das im Grunde, dass Sie diese Ablehnung nicht bearbeitet haben . Nur um Ihr Gedächtnis aufzufrischen, denken Sie daran, dass Versprechen in drei Zuständen vorkommen können. Zunächst stehen sie noch aus, dann können sie entweder erfüllt oder abgelehnt werden. In diesem Fall haben wir ein abgelehntes Versprechen. Also haben wir das nicht richtig gehandhabt. Also zurück im Code hier, wenn Sie diesen Kurs in der Datenbank speichern, schauen Sie, die Methode save gibt ein Versprechen zurück. Wir warten dort auf das Ergebnis. Bei dieser Implementierung gehen wir also nur vom Erfolgsszenario Wenn das Versprechen abgelehnt wird, haben wir keinen Code, um damit umzugehen. Also habe ich dir vorhin gesagt, dass du diesen Code in einen TR-Cache-Block legen solltest . Also lass uns das hierher verschieben. Fügen Sie hier den Cache-Block hinzu, wir erhalten eine Ausnahme und dann können wir eine Ausnahmemeldung auf dem Canso anzeigen Jetzt, zurück im Terminal, lassen Sie uns die Anwendung noch einmal ausführen Wir bekommen also keine Warnung mehr. Stattdessen erhalten wir diese Fehlermeldung. Möglicherweise schlägt die Validierung fehl, der Pfadname ist erforderlich. Wenn wir also ein ungültiges Kursobjekt haben, erlaubt uns Mongoose nicht, den Kurs über die Datenbank zu speichern Validierung erfolgt also automatisch, Die Validierung erfolgt also automatisch, wenn wir versuchen, einen Kurs über die Datenbank zu speichern Wir können die Validierung auch manuell auslösen. Lassen Sie mich diese beiden Zeilen kommentieren. Dieses Kursobjekt hat eine Validierungsmethode. Nun, diese Validierungsmethode, schauen Sie, sie gibt das Versprechen ungültig zurück, also können wir darauf warten. Und wenn unser Kurs ungültig ist, bekommen wir eine Ausnahme und landen dann in diesem Cache-Block. Gehen wir also zurück zum Terminalknotenindex, schauen Sie, wir haben den gleichen Validierungsfehler. Der Pfadname ist erforderlich. Nun, eine Sache, die mir persönlich am Design von Mongoose nicht gefällt , ist, dass diese Variantenmethode als nichtig gilt. Also hier haben wir keine Ergebnisse . Idealerweise sollte diese Validierungsmethode einen booleschen Wert zurückgeben. Wir könnten das also als gültig bezeichnen. Und wenn der Kurs dann nicht gültig ist, könnten wir hier eine gewisse Logik haben. Das ist also ein Konstruktionsfehler und ein Mungo. Es erwidert ein Versprechen der Nichtigkeit. Die einzige Möglichkeit, einen solchen booleschen Wert zu erhalten, besteht darin, hier einen Rückruf zu übergeben Anstatt also auf das Versprechen zu warten, müssen wir zum Callback-Phase-Ansatz zurückkehren Hier übergeben wir also eine Funktion , die ein Fehlerobjekt akzeptiert, und dann können wir überprüfen, ob wir Fehler haben Dann können wir etwas Logik ausführen. Jetzt fragst du dich vielleicht, wir haben diesen Cache-Block bereits hier. Wenn wir also Validierungsfehler haben, können wir diese Art von Logik hier ausführen. Das stimmt, aber solchen Code zu schreiben ist ein bisschen chaotisch Ich hoffe also, dass Mongos Team irgendwann in der Zukunft diese Methode auf Dana Boolean umstellt Lassen Sie uns nun diesen Code verschieben und zu unserem ursprünglichen Code zurückkehren Eine Sache, die ich hier klarstellen muss , ist , dass diese Validierung, die wir für die Eigenschaft name implementiert haben die Eigenschaft name implementiert nur bei Mungos von Bedeutung ist Mongo DB interessiert sich nicht für diese Namenseigenschaft. Wenn wir also mit Datenbanken wie SQL Server oder MySQL gearbeitet haben , wissen Sie, dass wir in diesen Datenbanken die Validierung auf Datenbankebene definieren können In unserer Kurstabelle werden wir zum Beispiel eine Namensspalte haben, werden wir zum Beispiel eine Namensspalte haben und wir können diese Spalte als erforderlich markieren. Damit können wir einen Kurs ohne den Namen nicht in unserer Datenbank speichern . In Mongo DB haben wir das nicht. Mongo Dew interessiert sich für all diese Dinge nicht. Diese Validierung, die wir hier implementiert haben, ist also nur bei Mungos von Bedeutung wir versuchen, einen Kurs zu speichern, führt Mongoose die Validierungslogik führt Mongoose Und wenn der Kurs nicht gültig ist, wird er nicht in der Datenbank gespeichert Nun, eine letzte Sache muss ich hier klarstellen, bevor wir diesen Vortrag beenden. Zu Beginn des Abschnitts über Express habe ich Ihnen ein Nullpaket namens Joy vorgestellt Sie fragen sich vielleicht, wann wir zwei Arten von Validierungen haben Sollten wir Joy oder Mongoose als Bestätigung verwenden Die Antwort lautet beides. Diese Art von Validierungen ergänzen sich gegenseitig. Deshalb verwenden wir Freude in unseren RESTful-APIs. Wir verwenden das als ersten Angriff, um sicherzustellen, den Daten, die der Client uns sendet, um gültige Daten handelt Aber wir benötigen diese Art der Validierung bei Mangos immer noch , um sicherzustellen , dass die Daten, die wir der Datenbank speichern, in der richtigen Form sind, da es möglich ist , dass der Client uns im Hauptteil der Anfrage einen gültigen Kurs sendet uns im Hauptteil der Anfrage einen gültigen Kurs Aber wenn wir ein Kursobjekt in unserem SDDP-Dienst erstellen, vergessen wir vielleicht, die Eigenschaft name auf das zu setzen, was wir aus dem Punktnamen des Anforderungspunkts im Hauptteil erhalten Indem wir also die Validierung in Mangos erzwingen, können wir sicherstellen, dass Programmierfehler wie dieser nicht führen, dass ungültige Dokumente in einer Mongo-DV-Datenbank gespeichert werden Mongo-DV-Datenbank gespeichert Als Nächstes werden wir uns die eingebauten gültigen Fehler in Mangos ansehen eingebauten gültigen Fehler in 3. Integrierte Mongoose-Validatoren verwenden: In der letzten Vorlesung haben wir etwas über diesen erforderlichen Validator gelernt , einer der in Mangos eingebauten Validatoren ist In dieser Vorlesung werden wir uns diese eingebauten Validatoren genauer ansehen Also diese erforderliche Eigenschaft hier, wir können sie auf einen booleschen Wert oder eine Funktion setzen, die einen booleschen Wert Funktion Und das ist nützlich , wenn Sie Ihre Eigenschaft bedingt als erforderlich festlegen möchten oder Stellen wir uns zum Beispiel vor, der Preis ist nur erforderlich, wenn der Kurs veröffentlicht wird Fügen wir hier den erforderlichen Validator hinzu. Zuerst ersetzen wir Zahl durch ein Objekt. Stellen Sie den Typ hier wieder auf Zahl zurück. Und dann auf erforderlich setzen. Hier müssen wir eine Funktion übergeben. Also Funktion. Und in dieser Funktion geben wir einen booleschen Wert zurück Also geben wir das zurück, um auf dieses Kursobjekt zu verweisen . Punkt ist veröffentlicht Wenn es also wahr ist, dass es veröffentlicht ist, dann ist ein Preis erforderlich. Okay. Jetzt hier, ich muss etwas klarstellen. In diesem speziellen Fall können wir diese Funktion nicht durch eine Pfeilfunktion ersetzen. Mit anderen Worten, wenn wir das tun, funktioniert unser Validator nicht, weil Pfeilfunktionen keine eigene Funktion haben Sie verwenden diesen Wert des umschließenden Ausführungskontextes. In diesem speziellen Fall gibt es irgendwo in Mongoose eine Funktion , die diese aufrufen wird Diese Referenz, die wir hier haben, bezieht sich auf diese Funktion, nicht auf das Kursobjekt, mit dem wir es hier zu tun haben Also müssen wir das wieder auf eine reguläre Funktion zurücksetzen. Lassen Sie uns nun diese Validierung testen. Also hier ist unser Kursobjekt. Ich werde den Preis streichen und Sie können sehen, dass der Kurs veröffentlicht ist. Wir sollten also zwei Validierungsfehler bekommen. Jetzt, zurück im Terminal, lassen Sie uns die Anwendung ausführen. Schauen Sie, der Pfadpreis ist erforderlich und der Pfadname ist ebenfalls erforderlich. Später werde ich Ihnen zeigen, wie Sie einzelne Fehlermeldungen aus dieser Ausnahme abrufen können. Im Moment erhalten wir die Nachricht nur als einfache Zeichenfolge. Das ist also unser erforderlicher Validator. Wir können das auf einen einfachen booleschen Wert oder eine Funktion setzen , um eine Eigenschaft bedingt erforderlich zu machen Abhängig von der Art der Eigenschaften, die wir hier haben, haben wir nun zusätzliche eingebaute Validatoren Bei Zeichenketten haben wir zum Beispiel auch Min Length und Max Length. Lass es mich dir zeigen. Ich werde das aufschlüsseln. Hier fügen wir die Mindestlänge hinzu. Nehmen wir an, wir möchten sicherstellen , dass wir mindestens fünf Zeichen haben. Hier können wir auch die maximale Länge festlegen. Sagen wir 255 Zeichen. Wir haben auch MT, und hier können wir einen regulären Ausdruck übergeben. In diesem speziellen Fall macht es keinen Sinn, einen regulären Ausdruck auf den Namen eines Kurses anzuwenden . Also werde ich das loben. Ein weiterer nützlicher Validator, den wir für Zeichenketten haben, ist Enum. Ich werde hier eine weitere Immobilie erstellen. Nennen wir das Kategorie. Und legen Sie die Zeichenfolge vom Typ zwei fest. Jetzt können wir hier den Enum-Validator verwenden. Wir setzen dies auf ein Array gültiger Zeichenketten . Nehmen wir an, wir haben einige vordefinierte Kategorien, Internet, Mobilfunknetz usw. Wenn wir also einen Kurs erstellen, sollte die Kategorie, die wir festlegen, einer dieser Werte sein. Andernfalls erhalten wir einen Validierungsfehler. Lassen Sie mich das also erforderlich machen. Nun zurück zu unserem Kursobjekt. Lassen Sie uns die Kategorie hinzufügen, und ich werde sie so einstellen, dass sie einfach anhängen soll. Lassen Sie uns jetzt den Namen und den Preis zurückbringen. Wir können also nur den Validierungsfehler für die Kategorie sehen. Also zurück im Terminalknoten, indexiert oder verfolgt, schauen Sie, Kategorie ist kein gültiger Aufzählungswert für die Pfadkategorie Das sind also die Validatoren , die für Zeichenketten spezifisch sind. Wir haben Min Land, Max Length, Match für die Verwendung eines regulären Ausdrucks und Für Zahlen haben wir min und max. Also hier ist der Preis eine Zahl. Wir können ein Minimum von 10$ und ein Maximum von 200$ festlegen. Und wir haben auch diese beiden Validatoren für Daten. In der nächsten Vorlesung werden Sie etwas über benutzerdefinierte Validatoren lernen 4. Benutzerdefinierte Validierungsprogramme in Mongoose erstellen: Manchmal geben uns die eingebauten Validatoren in Mango nicht die Art von Validierung, die wir benötigen Schauen Sie sich zum Beispiel diese Tags-Eigenschaft an. Unser Tag ist ein String-Array. Was ist, wenn wir diese Regel durchsetzen wollen , dass jeder Kern mindestens ein Tag haben sollte? Wir können den erforderlichen Validator nicht verwenden , weil wir mit required einfach ein leeres Array übergeben können, und das ist aus Mangus' Sicht absolut gültig Also hier brauchen wir einen benutzerdefinierten Validator. Also zuerst müssen wir das durch ein Objekt ersetzen, um es durch ein Objekt zu ersetzen Hier setzen wir den Typ auf Array. Jetzt müssen wir einen benutzerdefinierten Validator definieren. Also hier setzen wir die gültige Eigenschaft auf ein Objekt. In diesem Objekt haben wir eine Eigenschaft namens validator, die wir auf eine Funktion setzen Diese Funktion benötigt ein Argument, das die Abkürzung für Value ist Und hier können wir unsere benutzerdefinierte Validierungslogik implementieren. Also können wir so etwas zurückgeben. Wenn Galen größer als Null ist, diese Eigenschaft gültig Wir können hier auch eine benutzerdefinierte Nachricht festlegen. Dieses gültige Objekt hat also eine weitere Eigenschaft , nämlich Nachricht. Also Nachricht, das haben wir auch eingestellt. Ein Kern sollte mindestens ein Tag haben. Lassen Sie uns das jetzt testen. Also zurück in unserem Kursobjekt werde ich zuerst category auf einen gültigen Wert setzen, also web, dann werde ich ein mt-Array übergeben. Also zurück im Terminalknoten, indexiert oder hat. Also gut, sieh mal, ein Kern sollte mindestens einmal gegraben werden. Was ist, wenn wir diese Immobilie so ausschließen? Mal sehen, was passiert. Noch einmal, wir erhalten dieselbe Nachricht. Ein Kern sollte mindestens einmal gegraben werden. Wenn wir diese Eigenschaft also nicht setzen weil wir ihren Typ als Array definieren, initialisiert Mongoose sie mit einem leeren Was ist nun, wenn wir das auf Null setzen? Also jetzt zurück im Terminal. Okay, schau, die Eigenschaftslänge von Nub kann nicht gelesen werden. Das ist nicht die Art von Bestätigungsnachricht, die wir erhalten wollen Also müssen wir unsere Validierungslogik in etwa so ändern . Wenn wir als Wert angeben und die Längeneigenschaft größer als Null ist, diese Eigenschaft gültig. Also zurück im Terminal, lassen Sie uns das noch einmal ausführen. Ein Kern sollte mindestens ein Etikett haben, wunderschön. So definieren Sie also einen benutzerdefinierten Validator. Sie legen die Validate-Eigenschaft auf ein Objekt fest. In diesem Objekt fügen Sie diese Validierungsfunktion hinzu, und im Optimalfall können Sie eine Nachricht festlegen 5. Validierungsfehler in Mongoose: Bisher haben wir nur eine einfache Meldung zu unserem Validierungsfehler angezeigt eine einfache Meldung zu unserem Validierungsfehler In dieser Vorlesung werden wir dieses Fehlerobjekt genauer untersuchen. Diese Ausnahme, die wir im Cache-Block erhalten, hat also eine Eigenschaft namens errors. In diesem Objekt haben wir für jede ungültige Eigenschaft in unserem Kursobjekt eine separate Eigenschaft. Lassen Sie mich Ihnen zeigen, was ich meine. Also zurück in unserem Kursobjekt, hier sind die Eigenschaften von Ports. Im Moment haben wir hier eine ungültige Eigenschaft, die Tag ist. Lassen Sie uns die Kategorie auch zu einer ungültigen Eigenschaft machen. Ich werde das auf einen Bindestrich setzen. Mit diesem Fehlerobjekt, das wir erhalten, werden wir nun zwei Eigenschaften haben. Eines sind Tags, das andere ist Kategorie. Okay? So können wir für alle Eigenschaften in diesem Fehlerobjekt iterieren und mehr Details zu jedem Validierungsfehler erhalten mehr Details zu jedem Validierungsfehler Für fehlerhafte Felder, die Fehler enthalten, führen wir hier ein Konsolenprotokoll Wir gehen zu R t errors, finden diese Eigenschaft und ermitteln ihren Wert. Nun, das ist ein Validierungsfehlerobjekt. Lass uns einen Blick darauf werfen. Also zurück im Terminalknoten-Indexpunkt Js, also lass mich nach oben scrollen und sehen, was hier passiert. Ordnung. Also schau mal, wir haben ein Objekt mit einem Validierungsfehler. Das ist die Botschaft. Darunter haben wir den Stack-Trace, okay? Abgesehen davon sind dies die Eigenschaften, die wir in der Option „ Validierungsfehler“ haben. Hier haben wir also eine Eigenschaft namens Eigenschaften, die uns Informationen über die Validierungsanforderungen für diese Eigenschaft gibt . Hier haben wir also Zugriff auf unsere Validator-Funktion. Sie können sehen, dass der Typ dieses Validators Enum ist. Dies sind die gültigen Aufzählungswerte für diese Eigenschaft. A bestimmt den Namen unserer Eigenschaft, in diesem Fall Kategorie, und Wert ist der aktuelle Wert Unser Validierungsfehlerobjekt hat also Eigenschaften und einige andere Eigenschaften. Eines davon ist kind, das auf Enum gesetzt ist, und das ist im Grunde eine Abkürzung zum Eigenschaftstyp Wir haben auch einen weiteren kurzen Eigenschaftspfad , der auf Kategorie und Wert gesetzt ist, was der aktuelle Wert für diese Eigenschaft Hier wiederholen wir also diese Objekte mit Validierungsfehlern Und hier haben wir mehrere Validierungsfehler. Das ist also der erste. Und darunter haben wir ein weiteres Validierungsfehlerobjekt. Das ist so, dass ein Kern mindestens ein Tag haben sollte. Wenn Sie also nach unten scrollen, können Sie sehen die Art dieses Validierungsfehlers benutzerdefiniert ist , da wir hier einen benutzerdefinierten Validator haben Der Pfad besteht aus Tags, der aktuelle Wert ist Null. Wenn Sie also die Bestätigungsfehlermeldung für jede ungültige Eigenschaft erhalten möchten , können wir einfach auf diese Nachrichteneigenschaft zugreifen. Jetzt, zurück im Terminal, lassen Sie uns die Anwendung erneut ausführen. Wir haben also zwei Validierungsfehlermeldungen. Dash ist kein gültiger Aufzählungswert für die Pfadkategorie, und hier ist der zweite Validierungsfehler für unsere Texteigenschaft 6. Schematypoptionen und Anpassungen in Mongoose: Bei der Definition eines Schemas haben Sie also gelernt, dass wir den Typ einer Eigenschaft hier direkt festlegen oder ein Objekt vom Typ Schema verwenden können Eigenschaft hier direkt festlegen oder ein Objekt vom Typ Schema verwenden Dieses Objekt hat nun einige Eigenschaften. Sie haben von einigen von ihnen erfahren. Sie kennen die Typeigenschaft, Sie kennen die erforderliche Aufzählung und so weiter In dieser Vorlesung werden wir uns einige weitere nützliche Eigenschaften ansehen , diese Objekte vom Typ Schema verfügbar sind Für Zeichenketten haben wir also drei zusätzliche Eigenschaften , die Sie verwenden können Wir haben Kleinbuchstaben. Wir können das auf wahr setzen. Und damit wandelt Mongoose den Wert dieser Kategorieeigenschaft automatisch in Kleinbuchstaben um Lass mich dir zeigen, wie das funktioniert. Zurück in unserem Kursobjekt. Okay, zuerst werde ich diesen Validierungsfehler entfernen. Ändern wir also die Kategorie in Web und beachten Sie, dass ich hier ein großes W verwende, oder? Ich werde nun in den Terminals von der Anwendung aus Tags auf, sagen wir, nt en setzen nun in den Terminals von der Anwendung aus Tags auf, sagen wir, nt en Terminals von der Anwendung aus Okay, wir haben ein Kursobjekt erstellt und es in der Datenbank gespeichert. Schauen Sie sich jetzt die Kategorie an. Es ist Web in Kleinbuchstaben. Und wenn Sie nach Kompass suchen, lassen Sie uns diese Liste aktualisieren Also hier ist unser neues Dokument. Die Kategorie ist auf ein Web in Kleinbuchstaben eingestellt. So funktioniert die Eigenschaft Lowercase. Wir haben auch Großbuchstaben. Auch hier können wir das auf true setzen. Technisch gesehen sollten wir eines davon verwenden, nicht beide. Und endlich haben wir Trim. Wenn wir also Polsterungen an unserer Saite haben, entfernt Mongoose diese Polsterungen automatisch Diese drei Eigenschaften sind also verfügbar, wenn Zeichenketten verwendet werden . Jetzt haben wir ein paar weitere Eigenschaften im Schematyp-Objekt, und diese Eigenschaften können verwendet werden, wenn jede Eigenschaft unabhängig von ihrem Typ definiert wird. Gehen wir zum Beispiel zurück zu unserer Preiseigenschaft. Nehmen wir an, wir möchten immer den Wert des Preises runden, sodass wir einen benutzerdefinierten Getter und einen benutzerdefinierten Setter definieren können Wir übergeben also eine Pfeilfunktion, die V oder einen Wert als Argument verwendet Jetzt können wir unsere benutzerdefinierte Logik definieren oder diesen Wert abrufen, sodass wir diesen Wert mit mathematischen Punkten abrunden können. Jetzt können wir auf ähnliche Weise einen benutzerdefinierten Satz definieren. Und hier übergeben wir eine ähnliche Funktion. Also gehen wir zur Mathpunkt-Runde. Wann immer wir also die Preiseigenschaft festlegen, wird der Funktionssatz aufgerufen, und hier runden wir diesen Wert ab. Wenn wir also zu unserem Kursobjekt zurückkehren und den Preis auf 15,8 setzen, schauen wir uns an, was passiert Also zurück im Terminal, lassen Sie uns die Anwendung erneut ausführen. Schau, wir haben ein neues grobes Objekt erstellt und der Preis ist auf 16 festgelegt. Also hier, als wir diesen Wert festgelegt haben , wurde unser benutzerdefinierter Setter aufgerufen Und hier haben wir diesen Wert gerundet. Jetzt zurück in Compass, hier ist unser letztes Kursdokument. Sie können sehen, dass der Preis auf 16 festgelegt ist. Lassen Sie uns das jetzt bearbeiten. Sie können sehen, dass der Typ dieser Eigenschaft auf Int 32 gesetzt ist , was eine Ganzzahl ist. Ich werde das auf Double ändern und dann den Wert 16-15 0,8 ändern Und schließlich klicken Sie auf Aktualisieren, um meine Änderungen zu übernehmen. Hier simuliere ich also ein Szenario, in dem wir ein Dokument haben , das in der Datenbank gespeichert wurde, bevor wir diese Rundungslogik implementiert haben In diesem Fall wird unser benutzerdefinierter Getter aufgerufen, wenn Sie diese Kurse lesen und dann auf die Eigenschaft price zugreifen unser benutzerdefinierter Getter Und hier runden wir diesen Wert ab. Lassen Sie mich Ihnen zeigen, wie das funktioniert. Lassen Sie uns zu unserer Funktion zum Abrufen von Kursen zurückkehren. Zuvor haben wir diese Paging-Logik in der Demo implementiert. Das brauchen wir nicht. Also werde ich diese beiden Zeilen auskommentieren und dann das Abfrageobjekt ändern, und dann das Abfrageobjekt ändern damit wir den jeweiligen Kurs lesen können. Wir möchten also, dass der Kurs mit der ID so eingestellt ist , dass er den Wert dieser Kurs-ID kopiert. Also zurück in Compass, hier ist unsere Kurs-ID. Kopiere das und füge es hier ein. Hier bekommen wir einen Kurs, damit wir auf das erste Element dieses Arrays zugreifen können . Wenn Sie nun die Preiseigenschaft lesen, werden Sie feststellen, dass der Wert dieser Eigenschaft gerundet wird. Lassen Sie uns also hier die Preiseigenschaft lesen. Lassen Sie uns zu diesem Create Course kommen und Get Courses nennen. Zurück im Terminal. Lassen Sie uns die Anwendung ausführen. Okay, schau, der Preis ist 16, obwohl wir ihn in der Datenbank als 15,8 gespeichert haben So funktionieren also diese benutzerdefinierten Getter und Setter. Der Setter wird aufgerufen, wenn wir den Wert einer Eigenschaft wie hier setzen, und der Getter wird aufgerufen wenn wir den Wert einer Eigenschaft lesen 7. Restrukturierung unseres FareWheels-Projekts: Ordnung. Also hier ist unsere Fair Wheels-Anwendung. Wenn Sie sich nun das Kundenmodul ansehen, können Sie hier oben sehen, dass wir dieses Kundenmodell definieren. Und darunter haben wir unsere Route-Handler. Dann haben wir nach all diesen Route-Handlern diese Funktion zur Validierung von Kunden Das ist also eine ziemlich einfache Anwendung. Und in diesem Modul haben wir 85 Codezeilen. Wenn Sie sich die Definition des Kundenobjekts oder des Kundenmodells ansehen, ist dies kein großes komplexes Modell. In einer realen Anwendung wird unser Kundenmodell komplexer sein. Der Code in diesem Modul wird also wachsen, und das müssen wir in dieser Vorlesung behandeln. Um unsere Anwendungen wartbar zu halten, sollten wir sicherstellen, dass jedes Modul nur für eine Sache verantwortlich ist Das ist in der Praxis das Prinzip der alleinigen Verantwortung. In dieser Anwendung ist das Modul dieses Kunden , das wir haben, Teil des Routenordners. Technisch gesehen sollten wir in diesem Modul also nur eine Definition der Route unseres Kunden haben. Die Definition eines Kundenobjekts gehört nicht wirklich in dieses Modul. In dieser Vorlesung werden wir also diesen Code extrahieren und an einer anderen Stelle platzieren. Also habe ich diesen Modellordner erstellt. In diesem Ordner werden wir Module wie Kundenhunde, Firmenhunde usw. haben . Fügen wir also einen neuen Ordner hinzu, Kundenpunkt js. Jetzt, zurück in Customers Dot JS, werde ich die Definition des Kundenmodells in unser neues Modell verschieben des Kundenmodells in unser neues Modell Lassen Sie uns das also hierher verschieben. Jetzt sind wir hier von Mangos abhängig. Also lass uns wieder nach oben gehen. Das ist die Linie zum Laden von Mangos. Wir müssen auch I laden, wie Sie gleich sehen werden. Jetzt, zurück in unserem Kundenmodul, werde ich auch die Funktion zur Validierung eines Kunden in unser neues Modul verschieben Validierung eines Kunden in unser neues Modul Also und füge es hier am Ende ein. Jetzt haben wir das Prinzip der alleinigen Verantwortung in der Praxis. Unser Kundenmodul enthält den gesamten Code zur Definition und Validierung eines Kundenobjekts Es weiß, wie ein Kunde aussehen sollte. Das JS-Modul unseres Kunden weiß alles über verschiedene Wege zur Zusammenarbeit mit Kunden. Hier haben wir also keinen anderen Code als die Bearbeitung von Expressrouten. Okay? Das bedeutet, dass wir Joy nicht mehr in dieses Modul laden müssen , weil die Validierung eines Kundenobjekts jetzt in der Verantwortung dieses neuen Moduls liegt , customer dot JS Okay? Nun, am Ende dieses Moduls, müssen wir diese Kundenklasse sowie diese validierte Kundenfunktion exportieren . Also schreiben wir Modulpunktexporte. Wir fügen hier Kunden in dieses Objekt ein oder eine kürzere Methode besteht darin, einfach die Exporteigenschaft zu verwenden. Ich habe Ihnen bereits gesagt, dass Exporte ein Verweis auf Modulpunktexporte sind. Wir können diesem Objekt also einfach zusätzliche Eigenschaften hinzufügen. Ebenso müssen wir diese Validierungsfunktion exportieren. Wir können den Namen kürzer machen. Anstatt den Kunden zu validieren, können wir also validieren verwenden und dies so einstellen, dass der Kunde validiert wird. Okay? Jetzt zurück in unserem alten Modul, hier haben wir zwei Möglichkeiten. Eine besteht darin, das Kundenmodul so zu laden. Also ständiger Kunde, wir haben das so festgelegt. Hier müssen wir eine Ebene höher gehen und dann zum Modellordner gehen und dann das Kundenmodul laden. Also dieses Kundenmodul, dieses Objekt hat zwei Eigenschaften. Eine ist Kunde, die andere ist validiert. Wenn wir dieses Kundenmodul auf diese Weise laden, Kunde schreiben, um auf den Kundentyp oder das Kundenmodell zu verweisen , um auf den Kundentyp oder das Kundenmodell müssen wir Kundenmodul Punkt Kunde schreiben, um auf den Kundentyp oder das Kundenmodell zu verweisen . Und du kannst sehen, dass das wirklich hässlich aussieht. Ein besserer Ansatz ist also die Objektdestrukturierung. , dass dieses Objekt, das beim Laden dieses Moduls zurückgegeben Sie wissen, dass dieses Objekt, das beim Laden dieses Moduls zurückgegeben wird, zwei Eigenschaften hat: customer und validate Wir können dieses Objekt destrukturieren und es in die beiden Konstanten customer und validate laden in die beiden Konstanten customer und validate Deshalb setzen wir hier die geschweiften Klammern ein , wenn Damit wird die Kundenkonstante auf das gesetzt, was von diesem Modul zurückgegeben wird Mar. Okay. So müssen wir Kunden nicht an mehreren Stellen wiederholen In ähnlicher Weise wird diese validate-Eigenschaft auf den Wert gesetzt, der von diesem Modul zurückgegeben wird: validate. Jetzt müssen wir endlich diesen validierten Kunden durch palidate ersetzen, was ein kürzerer Name ist, und sauberer Hier ist eine weitere Referenz , die wir aktualisieren müssen Also validieren. Wenn Sie sich nun mit dieser Änderung die Anzahl der Codezeilen ansehen , die wir in diesem Modul haben, sehen Sie, wir haben 54 Zeilen. Anfangs hatten wir also über 80 Codezeilen, und jetzt haben wir ungefähr 50 Codezeilen. Als Übung möchte ich, dass Sie das Modul des Unternehmens ändern. Was die Strecken angeht, haben wir hier Unternehmen. In ähnlicher Weise haben wir hier oben die Definition des Unternehmensmodells. Ich möchte, dass Sie diesen Code extrahieren und in ein separates Modul einfügen.