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.