Transcription
1. Introduction du cours: Bienvenue dans le cours
Express JS, module sept, validation Mangus Ce cours s'inscrit dans la continuité de la série de cours Express JS. m'appelle Shawn Raganhi et je suis ravi de
vous guider à travers ce module
qui vous vos compétences en matière de dos
et de développement en
maîtrisant la validation de Mangus Dans ce module, nous nous
concentrerons sur la validation, un aspect crucial de tout système dorsal de
robot Vous apprendrez comment implémenter la validation dans les mangues pour
garantir l'intégrité des données Vous apprendrez ensuite à utiliser des validateurs
intégrés pour une application rapide et efficace des
contraintes, puis à créer des validateurs personnalisés adaptés aux besoins spécifiques des
applications Ensuite, vous
apprendrez à gérer erreurs de validation
et à y répondre avec élégance,
et enfin, à personnaliser les options du
schéma pour une flexibilité
et un contrôle accrus Ce module change la
donne pour les développeurs qui souhaitent créer des applications fiables
et évolutives. En maîtrisant la validation
Mongoose, vous allez écrire un code plus propre et exempt
d'erreurs, réduire les bogues et garantir que vos données sont toujours
cohérentes et fiables Voici quelques-unes des
compétences essentielles pour créer des API prêtes pour
la production. Dans ce module en tant que projet, nous continuerons à développer
l'application Fair Wheels. Tout d'abord, vous allez améliorer l'API de l'entreprise en
remplaçant le
tableau en mémoire par Mongo DB Vous allez ensuite créer l'APA
d'un nouveau client, avec des
opérations de crowdsourcing complètes et une validation. Ce projet pratique
consolidera votre compréhension intégration
de la validation
Mongoose dans les applications du monde réel. Ce module
regorge de techniques précieuses et d'une expérience pratique pour vous
aider à créer de meilleurs backends Alors plongeons-nous dans le vif du sujet et
faisons briller vos compétences. Rendez-vous à la première conférence.
2. Mettre en œuvre la validation dans Mongoose: I Il s'agit donc du schéma de base que nous avons défini
plus haut dans la section. Désormais, par défaut, toutes
ces propriétés que nous définissons ici
sont facultatives. Donc, si je crée un cours et que je laisse de côté toutes
ces propriétés, puis que je sauvegarde le porte-monnaie
dans la base de données, ce sera une opération parfaitement
valide Mongo DV ne se
soucie pas que nous ayons un cours qui n'ait pas nom ou qui n'ait pas de prix Dans cette conférence,
je vais
vous montrer comment implémenter la validation. Maintenant, pour cette démo,
je vais uniquement
parler du validateur
requis Mais nous avons d'autres
validateurs intégrés que
vous découvrirez
dans la prochaine conférence Faisons donc en sorte que ce
nom soit obligatoire. Tout d'abord, nous remplaçons la
chaîne par un objet ici. Nous avons défini le type sur chaîne, puis nous avons défini required, true. Avec cela, si je crée un cours sans nom, alors
allons-y. Au moment où j'essaierai d'enregistrer
ce cours dans la base de données, je vais obtenir une
exception. Laisse-moi te montrer. Alors d'abord,
revenons à la fin de ce fichier et supprimons,
supprimons le cours. Maintenant, entrez, créez un cours. Maintenant, de retour dans le terminal,
lançons l'application. C'est bon. Regarde ce que nous avons. Nous avons reçu cette erreur de variation. Si vous voyez cette erreur, cela
signifie essentiellement que vous
n'avez pas géré ce rejet. Donc, juste pour vous rafraîchir la mémoire, souvenez-vous que les promesses peuvent
être exprimées en trois états. Dans un premier temps, ils sont en attente, puis ils peuvent être
remplis ou rejetés. Dans ce cas, nous avons
une promesse rejetée. Nous n'avons donc pas géré
cela correctement. Donc, dans le code ici, lorsque vous enregistrez ce cours
dans la base de données, regardez, la méthode save
renvoie une promesse. Nous y
attendons le résultat. Donc, avec cette implémentation, nous ne faisons que supposer
le scénario de réussite. Si la promesse est rejetée, nous n'avons aucun
code pour gérer cela. Donc plus tôt, je
vous ai dit que vous devriez mettre ce code dans
un bloc de cache tr. Alors, déplaçons ça ici. Ajoutez le bloc de cache ici, nous obtenons une exception,
puis nous pouvons afficher un
message d'exception sur le canso Maintenant, de retour dans le terminal, lançons l'application
une fois de plus. Nous ne recevons donc plus d'
avertissement. Au lieu de cela, nous recevons
ce message d'erreur. En cas d'échec de la validation,
le nom du chemin est obligatoire. Donc, si nous avons un objet de cours
non valide, Mongoose ne nous autorise pas à enregistrer le cours dans la
base de données La validation démarre donc
automatiquement lorsque nous essayons d'enregistrer un
cours dans la base de données Nous pouvons également
déclencher manuellement la validation. Permettez-moi de commenter
ces deux lignes. Cet objet de cours possède
une méthode de validation. Maintenant, cette méthode de validation renvoie une promesse d'annulation, nous pouvons
donc l'attendre. Et si notre cours n'est pas valide, nous obtiendrons une exception et nous nous retrouverons
dans ce bloc de cache. Revenons donc à l'index des nœuds
terminaux où,
écoutez, nous avons eu la même erreur
de validation. Le nom du chemin est obligatoire. Personnellement, une chose que je n'
aime pas dans le
design de la mangouste c'est que cette méthode variable promet
d' Nous n'
avons donc aucun résultat ici. Idéalement, cette méthode de validation
doit renvoyer un booléen. On pourrait donc dire que c'est valide. Et puis, si le
cours n'est pas valide, nous pourrions avoir une certaine logique ici. Il s'agit donc d'un
défaut de conception et d'une mangouste. Cela renvoie une promesse de nullité. Maintenant, la seule option
pour obtenir ce type de booléen est de passer
un rappel Donc, au lieu d'
attendre la promesse, nous devons revenir à l'approche de la phase de
rappel Nous passons donc ici une fonction
qui prend un objet d'erreur, puis nous pouvons vérifier
si nous avons des erreurs. Ensuite, nous pouvons exécuter une certaine logique. Maintenant, vous pouvez vous demander, nous
avons déjà ce bloc de cache ici. Donc, si nous avons des erreurs de
validation, nous pouvons exécuter ce
type de logique ici. C'est vrai, mais écrire code comme celui-ci est un
peu compliqué. J'espère donc que
dans le futur, l' équipe de
Mongo changera cette
méthode en Dana Boolean Cela mis à part, déplaçons ce code et revenons
à notre code d'origine. Une chose que je
dois clarifier ici est que cette validation que nous avons implémentée sur la propriété name n'a de sens que dans Mongoos Mongo DB ne se
soucie pas de cette propriété de nom. Donc, si nous avons travaillé
avec des bases de données comme SQL Server ou MySQL, vous savez que dans
ces bases de données, nous pouvons définir la validation
au niveau de la base de données. Par exemple, dans
notre tableau des cours, nous allons
avoir une colonne de nom et nous pouvons marquer cette
colonne comme il convient. Nous ne pouvons donc pas enregistrer un cours sans
son nom dans notre base de données. Dans Mongo DB, ce n'est pas le cas. Mongo Dew ne se
soucie pas de tout ça. Cette validation que
nous avons implémentée ici n'a donc de
sens que dans Mongoos Lorsque nous essayons de
sauvegarder un cours, Mongoose exécute la logique de
validation Et si le cours n'est pas valide, il ne sera pas enregistré dans la base de données. Maintenant, une dernière chose que je dois clarifier ici avant de
terminer cette conférence. Plus tôt dans la section
sur Express, je vous ai présenté un package
nul appelé Joy Vous vous demandez peut-être quand nous avons deux types de validation. Devons-nous utiliser Joy ou
devrions-nous utiliser Mongoose comme validation ? La réponse est les deux. Ces types de validations
se complètent mutuellement. C'est pourquoi nous utilisons la joie dans
nos API reposantes. Nous utilisons cela comme première
attaque pour nous assurer que les données que le client nous
envoie sont des données valides. Mais nous avons toujours besoin de ce
type de validation dans mangues pour nous assurer
que les données que nous
enregistrons dans
la base de données sont en bon état, car il est possible que le client
nous envoie un cours valide dans le
corps de la demande Mais lorsque nous créons un
objet de cours dans notre service SDDP, il peut
que nous ayons oublié de définir la propriété name comme celle que nous obtenons de request
point body point Ainsi, en imposant la
validation dans les mangos, nous pouvons nous assurer que de telles
erreurs de programmation n'
entraîneront pas la
persistance de
documents invalides dans une base de données
Mongo Ensuite, nous allons
examiner les erreurs valides
intégrées dans les mangues
3. Utiliser des validateurs de mangouste intégrés: Lors de la dernière conférence, nous avons
découvert ce validateur obligatoire, qui est l'un des validateurs intégrés
aux mangos Dans cette conférence, nous
allons examiner de plus près ces validateurs
intégrés Donc, cette propriété requise ici, nous pouvons la définir sur un booléen ou une fonction qui
renvoie un Et cela est utile
lorsque vous souhaitez rendre votre
propriété requise ou non de
manière conditionnelle Imaginons par exemple que le prix
ne soit exigé que si le
cours est publié. Ajoutons le
validateur requis ici. Tout d'abord, nous remplaçons
le nombre par un objet. Remettez le type ici
à un numéro. Et puis définissez les paramètres requis. Ici, nous devons
transmettre une fonction. Donc, fonctionne. Et
dans cette fonction, nous renvoyons un booléen Nous le renvoyons donc pour faire référence à publication de
cet objet de cours. Donc, si c'est vrai, le prix sera exigé. OK. Maintenant, je dois
clarifier quelque chose. Dans ce
cas précis, nous ne pouvons pas remplacer cette fonction
par une fonction flèche. En d'autres termes, si nous faisons cela, notre validateur
ne fonctionnera pas car fonctions
fléchées n'
ont pas leur propre identifiant Ils utilisent cette valeur du contexte d'exécution
englobant. Dans ce cas particulier,
il existe une fonction quelque part dans Mongoose qui va appeler cette fonction La référence que nous avons ici
fera référence à cette fonction, non à l'objet du cours dont
nous parlons ici. Nous devons donc
revenir à une fonction normale. Maintenant, testons cette validation. Voici donc l'objet de notre cours. Je vais supprimer le prix, et vous pourrez voir que le
cours est publié. Nous devrions donc avoir deux erreurs
de validation. Maintenant, de retour dans le terminal, lançons l'application. Écoutez, le prix du chemin est obligatoire et le nom du chemin
est également requis. Plus tard, je vais vous
montrer comment obtenir des messages d'erreur
individuels
à partir de cette exception. Pour l'instant, nous recevons simplement le message sous forme de chaîne de caractères. C'est donc notre validateur
requis. Nous pouvons définir cela comme
un simple booléen ou une fonction pour
rendre une propriété obligatoire de manière conditionnelle Maintenant, en fonction du type
de propriétés que nous avons ici, nous avons des validateurs
intégrés supplémentaires Par exemple, pour les chaînes, nous avons également la longueur minimale et la longueur
maximale. Laisse-moi te montrer. Je vais le décomposer. Ici, nous ajoutons la longueur minimale. Supposons que nous voulions nous
assurer d'avoir au moins
cinq personnages. Ici, nous pouvons également définir la longueur maximale. Disons 255 caractères. Nous avons également MT, et ici nous pouvons transmettre
une expression régulière. Dans ce cas précis, cela n'a
aucun sens d'appliquer une expression régulière
au nom d'un cours. Je vais donc le
recommander. Un autre validateur utile que nous
avons pour les chaînes est Enum. Je vais créer
une autre propriété ici. Appelons cette catégorie. Et définissez la chaîne de type deux. Ici, nous pouvons utiliser
le validateur Enum. Nous lui attribuons un tableau
de chaînes valides. Supposons que nous ayons quelques catégories
prédéfinies, réseau mobile
Web, etc. Ainsi, lors de la création d'un cours, la catégorie que nous définissons doit
être l'une de ces valeurs. Sinon, nous allons
avoir une erreur de validation. Permettez-moi donc de rendre cela obligatoire. Revenons maintenant à notre objet de cours. Ajoutons la catégorie, et je vais la configurer pour qu'
elle soit simplement jointe. Maintenant,
revenons au nom et au prix. Nous ne pouvons donc voir que l'
erreur de validation pour la catégorie. Donc, de retour dans le
nœud terminal, indexé ou poursuivi,
regardez, la catégorie n'est pas une valeur d'énumération valide
pour la catégorie de chemin Ce sont donc les validateurs
spécifiques aux chaînes. Nous avons Min Land, max length, match for using a regular
expression et num. Pour les chiffres, nous
avons le minimum et le maximum. Ici, le prix est un chiffre. Nous pouvons fixer un minimum de
10$ et un maximum de 200$. Et nous avons également ces
deux validateurs pour les dates. Dans la prochaine conférence,
vous allez découvrir les validateurs
personnalisés
4. Créer des validateurs personnalisés dans Mongoose: Parfois, les validateurs intégrés
à Mango ne nous fournissent pas le
type de validation dont nous avons besoin Par exemple, examinez la propriété de
cette balise. Notre balise est un tableau de chaînes. Et si nous voulions
appliquer cette règle selon laquelle chaque cœur doit
avoir au moins une balise ? Nous ne pouvons pas utiliser le validateur
requis car avec required, nous pouvons simplement transmettre
un tableau vide, ce qui sera parfaitement valide du point de vue de Mangus. Nous avons donc besoin d'un validateur
personnalisé. Nous devons donc d'abord
le remplacer par un objet pour le remplacer par
un objet. Ici, nous définissons le type sur array. Nous devons maintenant définir
un validateur personnalisé. Nous définissons donc ici la
propriété valide pour un objet. Dans cet objet, nous avons une
propriété appelée validateur, que nous avons définie comme une fonction Cette fonction prend un argument, qui est l'abréviation de value. Et ici, nous pouvons implémenter
notre logique de validation personnalisée. Nous pouvons donc renvoyer
quelque chose comme ça. Si Galen est supérieur à zéro, cette propriété
sera valide Nous pouvons également définir un message
personnalisé ici. Cet objet valide
possède donc une autre propriété
qui est message. Donc message, nous l'avons défini aussi. Un noyau doit avoir
au moins une étiquette. Maintenant, testons cela. Pour en revenir à notre
objet de cours,
je vais d'abord définir la catégorie sur une valeur valide, donc web, puis je vais
transmettre un tableau mt. Donc, revenez dans le
nœud terminal, indexé ou possédé. Très bien, écoutez, un noyau
doit être creusé au moins une fois. Et si on excluait cette
propriété de cette façon ? Voyons ce qui va se passer. Une fois de plus, nous recevons
le même message. Un noyau doit être
creusé au moins une fois. Donc, si nous ne définissons pas cette propriété parce que nous définissons son
type comme un tableau, Mongoose l'
initialisera à un tableau vide. Et si nous le
mettions à zéro ? Maintenant, revenons dans le terminal. OK, écoutez, je ne peux pas lire la longueur de la
propriété du nœud. Ce n'est pas le type de message de validation que
nous voulons recevoir. Nous devons donc modifier notre logique de
validation comme suit. Si nous avons une valeur
et que la propriété de longueur
est supérieure à zéro, cette propriété sera valide. Donc, de retour dans le terminal,
relançons ça une fois de plus. Un noyau doit avoir au
moins une étiquette, c'est beau. Voici donc comment définir
un validateur personnalisé. Vous définissez la
propriété de validation sur un objet. Dans cet objet, vous ajoutez
cette fonction de validation
et, de manière optimale, vous
pouvez définir un message
5. Gérer les erreurs de validation dans Mongoose: Jusqu'à présent, nous n'avons affiché qu' un simple message concernant
notre erreur de validation. Dans cette conférence, nous allons
examiner cet
objet d'erreur plus en détail. Cette exception que nous obtenons dans
le bloc de cache a donc une
propriété appelée erreurs. Dans cet objet, nous avons
une propriété distincte pour chaque propriété non valide
de notre objet de cours. Laissez-moi vous montrer ce que je veux dire. Pour en revenir à l'objet de notre cours, voici les
propriétés des ports. À l'heure actuelle, nous avons ici une propriété
non valide qui est tag. Faisons également de la catégorie
une propriété non valide. Je vais régler ça sur un tiret. Maintenant, avec ces erreurs l'objet que nous obtenons
aura deux propriétés. L'un concerne les tags, l'
autre les catégories. OK ? Nous pouvons donc itérer toutes
les propriétés de cet objet d'erreur et obtenir plus de détails sur
chaque erreur de validation Donc, pour le champ contenant une
erreur, nous faisons
ici un journal de console. Nous allons à R t erreurs, trouvons cette propriété,
obtenons sa valeur. Il s'agit maintenant d'un objet d'erreur de
validation. Allons y jeter un œil. Revenons donc au point Js de l'index du nœud
terminal, alors laissez-moi faire défiler la page vers le haut et voir
ce qui se passe ici. C'est bon. Alors regardez ici, nous avons un objet d'
erreur de validation. C'est le message. En dessous, nous avons la trace de la pile, d'accord ? Maintenant, tout cela mis à part, voici les propriétés que nous
avons dans l'option
d'erreur de validation. Nous avons donc ici une propriété
appelée properties, qui nous donne des informations sur les exigences de validation
pour cette propriété. Nous avons donc ici accès à
notre fonction de validation. Vous pouvez voir que le type de
ce validateur est Enum. Il s'agit des
valeurs d'énumération valides pour cette propriété. A détermine le nom
de notre propriété, dans ce cas, la catégorie, et la valeur est la valeur actuelle. Notre objet d'erreur de validation
possède donc des propriétés et
quelques autres propriétés. L'un est kind, qui
est défini sur Enum,
et il s'agit essentiellement d'un
raccourci vers le type de propriétés Nous avons également un autre chemin de propriété
court, défini sur
catégorie et valeur, qui est la
valeur actuelle de cette propriété. Nous sommes donc en train d'itérer sur ces objets
d'erreur de validation Et ici, nous avons plusieurs erreurs
de validation. C'est donc le premier. Et en dessous, regardez, nous avons un autre objet d'erreur de
validation. C'est parce qu'un noyau doit
avoir au moins une étiquette. Donc, si vous faites
défiler l'écran vers le bas, vous pouvez voir le type de cette erreur de
validation est défini par
l'utilisateur car
nous avons ici un validateur personnalisé Le chemin est constitué de balises, la valeur
actuelle est nulle. Donc, si vous souhaitez obtenir le message d'erreur de
validation pour chaque propriété non valide, nous pouvons simplement accéder à
cette propriété de message. Maintenant, de retour dans le terminal, relançons l'application. Nous avons donc deux messages
d'erreur de validation. Dash n'est pas une
valeur d'énumération valide pour la catégorie de chemin, et voici la deuxième erreur de
validation pour notre propriété de texte
6. Options de type de schéma et personnalisation dans Mongoose: Ainsi, lors de la définition d'un schéma, vous avez appris que
nous pouvons définir le type d' une propriété directement ici ou
utiliser un objet de type schéma. Maintenant, cet objet possède
quelques propriétés. Vous avez
découvert certains d'entre eux. Vous connaissez la propriété type, vous connaissez l'
énumération requise, etc. Dans cette conférence, nous
allons examiner quelques autres
propriétés utiles disponibles sur ces objets de type
chema Donc, pour les chaînes, nous avons trois propriétés supplémentaires
que vous pouvez utiliser. Nous avons des minuscules. Nous pouvons définir cela sur true. Ainsi, Mongoose
convertira automatiquement la valeur de cette propriété de
catégorie en minuscules Laissez-moi vous montrer comment cela fonctionne. Revenons à notre objet de cours. OK, je vais d'abord
supprimer cette erreur de validation. Passons donc à la
catégorie Web et notons que j'utilise ici
un W majuscule, n'est-ce pas ? Je vais définir les
balises sur, disons, « nt en now » dans les terminaux
depuis l'application. OK, nous avons créé un objet de cours
et l' avons enregistré dans la base de données. Maintenant, regardez la catégorie. C'est du Web en minuscules. Et si vous regardez Compass, actualisons cette liste. Voici donc notre nouveau document. La catégorie est définie sur
un Web en minuscules. Voici donc comment fonctionne la propriété
en minuscules. Nous avons également des majuscules. Encore une fois, nous pouvons définir cela sur true. Maintenant, techniquement, nous devrions utiliser l'un d'entre eux,
pas les deux. Et enfin, nous avons Trim. Donc, si nous avons des rembourrages
autour de notre ficelle, mangouste
les retirera automatiquement Ces trois propriétés sont donc disponibles lors de l'utilisation de chaînes. Nous avons maintenant quelques propriétés supplémentaires
dans l'objet
de type schéma, et ces propriétés
peuvent être utilisées lors définition d'une propriété
quel que soit son type. Par exemple, revenons
à notre propriété tarifaire. Supposons que nous voulions toujours
arrondir la valeur du prix, afin de pouvoir définir un
getter personnalisé et un setter personnalisé Donc, pour arriver ici, nous passons une fonction flèche qui prend
V ou value comme argument. Nous pouvons maintenant définir notre
logique personnalisée ou obtenir cette valeur, afin de pouvoir appliquer des points mathématiques
autour de cette valeur. Nous pouvons maintenant
définir de la même manière un ensemble personnalisé. Et nous passons ici une fonction
similaire. Nous passons donc à Math Dot Round of. Ainsi, chaque fois que nous définissons
la propriété
du prix, l'ensemble de fonctions
est appelé, et ici nous
arrondissons cette valeur. Donc, si nous revenons à l'objet de notre cours et
fixons le prix à 15,8€, voyons ce qui se passe Donc, de retour dans le terminal,
relançons l'application. Écoutez, nous avons créé un
nouvel objet grossier, et le prix est fixé à 16. Donc, ici, lorsque nous avons défini cette valeur, notre
setter personnalisé a été appelé Et ici, nous avons arrondi cette valeur. De retour dans Compass, voici notre dernier document de cours. Vous pouvez voir que le
prix est fixé à 16€. Modifions-le maintenant. Vous pouvez voir que le type de
cette propriété est défini sur Int 32, qui est un entier. Je vais le remplacer par le double, puis changer
la valeur 16-15 0,8 Enfin, cliquez sur Mettre
à jour pour valider mes modifications. Donc, ici, je simule
un scénario dans lequel nous avons un document qui a été stocké dans la base de données avant d'
implémenter cette logique d'arrondissement Dans ce cas, si vous lisez ces cours puis que vous
accédez à la propriété du prix, notre outil de recherche personnalisé
sera appelé Et ici, nous allons
arrondir cette valeur. Laissez-moi vous montrer comment cela fonctionne. Revenons à notre fonction d'
obtention de cours. Auparavant, nous avions implémenté
cette logique de pagination dans la démo. Nous n'en avons pas besoin. Je vais donc commenter
ces deux lignes, puis je vais modifier objet de
la requête afin que nous puissions
lire le cours en question. Nous voulons donc que
le cours avec un identifiant configuré pour copier la valeur
de cet identifiant de cours. Pour en revenir à Compass,
voici notre identifiant de cours. Copiez-le et collez-le ici. Ici, nous allons suivre un cours afin d'
accéder au premier
élément de ce tableau. Maintenant, si vous lisez le
prix de la propriété, vous verrez que la valeur de cette propriété
sera arrondie. Alors voilà, lisons
le prix de l'immobilier. Commençons par créer un
cours et appelons obtenir des cours. De retour dans le terminal.
Lancez l'application. OK, écoutez, le prix est de 16, même si dans la base de données, nous l'avons enregistré au format 15,8 C'est ainsi que fonctionnent ces
getters et setters personnalisés. Le setter est appelé lorsque nous
définissons la valeur d'une
propriété comme ici, et le getter est appelé lorsque nous lisons la
valeur d'une
7. Restructurer notre projet FareWheels: C'est bon. Voici donc notre application
Fair Wheels. Maintenant, si vous regardez
le module client, vous pouvez voir ici en haut que
nous sommes en train de définir ce modèle
client. Et en dessous, nous avons
nos gestionnaires d'itinéraires. Ensuite, après tous ces gestionnaires d'
itinéraires, nous avons cette fonction de validation
du client Il s'agit donc d'une application assez
simple. Et dans ce module, nous
avons 85 lignes de code. Si vous examinez la définition de l'objet client ou
du modèle client, s'agit pas d'un modèle très complexe. Dans une application du monde réel, notre modèle client
va être plus complexe. Le code de ce
module va donc croître,
et c'est un point que nous devons
aborder dans cette conférence. Pour que nos applications restent
maintenables, nous devons nous assurer
que chaque module est responsable que d'une
seule chose C'est le
principe de responsabilité unique dans la pratique. Dans cette application,
le module du client que nous avons fait partie
du dossier routes. Techniquement, tout ce que
nous devrions avoir dans ce module est une définition
de l'itinéraire de notre client. La définition d'
un objet client n'a pas vraiment sa place
dans ce module. Dans cette conférence,
nous allons donc
extraire ce code et
le placer ailleurs. J'ai donc créé
ce dossier de modèles. Dans ce dossier, nous allons
avoir des modules tels que les chiens clients, les chiens de
compagnie, etc. Ajoutons donc un nouveau
fichier, customer dot js. Maintenant, dans customers point JS, je vais déplacer
la définition
du modèle client
dans notre nouveau modèle. Déplaçons donc cela ici. Maintenant, ici, nous sommes
dépendants des mangues. Revenons donc au début. C'est la ligne de chargement
des mangues. Nous devons également charger I, comme vous le verrez dans une seconde. Maintenant, de retour dans notre module
clients, je vais également
déplacer la fonction de
validation d' un client
dans notre nouveau module Alors, collez-le ici à la fin. Nous avons maintenant le
principe de
responsabilité unique dans la pratique. Notre module client
contient tout le code permettant de définir et de valider
un objet client Il sait à quoi
doit ressembler un client. Le module JS de nos clients connaît tous les moyens
de travailler avec les clients. Nous n'avons donc ici aucun code autre que la gestion des itinéraires
express. OK ? Cela signifie que nous n'avons plus besoin de charger
joy dans ce module car la validation d'un objet
client relève désormais la responsabilité de ce
nouveau module, customer point JS OK ? Enfin, à
la fin de ce module, nous devons exporter
cette classe de clients ainsi que cette fonction
client de validation. Nous écrivons donc le module dot exports. Nous ajoutons le client ici
dans cet objet ou une méthode plus courte consiste simplement à
utiliser la propriété d'exportation. Plus tôt, je vous ai dit que exports fait référence
au module dot exports. Nous pouvons donc simplement ajouter des
propriétés supplémentaires à cet objet. De même, nous devons exporter
cette fonction de validation. Nous pouvons raccourcir le nom. Ainsi, au lieu de valider le client, nous pouvons utiliser validate et le configurer
pour valider le client. OK ? Maintenant, dans
notre ancien module , nous avons deux choix. La première consiste à charger le module
client de cette manière. Donc, client constant,
nous l'avons défini sur require. Maintenant, nous devons monter d'
un niveau, puis accéder au dossier des modèles ,
puis charger le module
client. Donc, ce module client, cet objet possède deux propriétés. L'un est client, l'
autre est validé. Si nous chargeons ce
module client de cette
manière, afin de faire référence
au type client
ou au modèle de client, nous devons écrire customer
module point customer. Et tu peux voir que ça
a l'air vraiment moche. Une meilleure approche consiste donc à
utiliser la déstructuration d'objets. Cet objet qui est renvoyé après le chargement
de ce module, vous savez qu'il
possède deux propriétés, customer et validate. Nous pouvons déstructurer cet
objet et le charger dans ces deux constantes,
client et validation Nous avons donc placé les accolades ici lors de la définition de
ces constantes Ainsi, la constante
client sera définie sur ce qui est
renvoyé par ce module. Mar. D'accord. Nous n'avons donc pas à répéter
nos clients à plusieurs endroits. De même, cette
propriété de validation sera définie sur ce qui est
renvoyé par ce module, validate. Enfin, nous devons remplacer
ce client
de validation par palidate, qui est un nom plus court et plus propre Voici une autre référence
que nous devons mettre à jour Alors, validez. Maintenant,
avec ce changement, si vous regardez le
nombre de lignes de code que nous avons dans ce module, regardez, nous avons 54 lignes. Au départ, nous avions
plus de 80 lignes de code, et maintenant nous en avons environ
50. À titre d'exercice, je souhaite que vous modifiiez
le module de l'entreprise. Donc, en ce qui concerne les itinéraires,
nous avons ici des entreprises. De même, ici en haut, nous avons la définition
du modèle d'entreprise. Je veux que vous extrayiez ce code et que vous le mettiez
dans un module séparé.