‫Instructeur : Ensuite, parlons des validateurs personnalisés.
‫Donc, parfois, les validateurs intégrés ne suffisent tout simplement pas.
‫Et dans
‫ce cas, nous pouvons également créer nos propres validateurs personnalisés.
‫Et un validateur n'est en fait qu'une simple fonction
‫qui doit renvoyer vrai ou faux.
‫Et s'il renvoie false, cela signifie qu'il y a une erreur.
‫Et par contre quand on retourne
‫true, alors la validation est
‫correcte et la saisie peut être acceptée.
‫D'accord, créons maintenant un simple validateur personnalisé ici.
‫Et ce que je veux valider, c'est si la remise sur le
‫prix est effectivement inférieure au prix lui-même.
‫C'est quelque chose que nous ne
‫pouvons pas faire en utilisant les validateurs intégrés
‫et nous allons donc simplement créer les nôtres.
‫Nous devons maintenant spécifier ici un
‫objet pour les options SchemaType.
‫Bien.
‫Le type est donc nombre,
‫puis pour spécifier notre validateur, nous
‫utilisons la propriété validate.
‫Validez, puis comme je l'ai dit, une
‫simple fonction de rappel.
‫Et encore, pas une fonction flèche, mais
‫une fonction réelle, car
‫dans cette
‫fonction nous allons avoir accès à la variable
‫this, qui pointera vers le document courant.
‫Maintenant, si vous n'aviez pas besoin de cette variable,
‫vous pouvez bien sûr simplement utiliser une fonction flèche.
‫Nous avons une fonction
‫de rappel, et cette fonction de rappel a en fait
‫accès à la valeur qui a été entrée.
‫Donc, dans ce cas, la remise sur le prix que l'utilisateur a spécifiée.
‫C'est donc ce que j'appelle la valeur, val pour faire court.
‫N'oubliez pas que nous devons retourner
‫vrai ou faux à partir de ce validateur.
‫Quand voulons-nous retourner faux
‫et quand voulons-nous retourner vrai ?
‫Eh bien, nous voulons une erreur lorsque la remise
‫est supérieure ou égale au prix.
‫Et donc fondamentalement, ce que nous voulons retourner
‫ici, c'est le test consistant à tester si la
‫valeur est inférieure à cela. le prix.
‫D'accord, disons que la remise sur le prix est de 100
‫et que le prix réel est de 200.
‫100 est inférieur à 200, c'est vrai et nous n'avons donc aucune erreur.
‫Et c'est logique parce que c'est exactement ce que nous voulons.
‫La remise doit toujours être inférieure.
‫En revanche, si la remise est de 250,
‫cela s'avère faux.
‫Et puis false, rappelez-vous, déclenchera une erreur de validation.
‫Testons-le maintenant en fait.
‫Prix
‫(claquement du clavier) et remise
‫de prix.
‫Et utilisons les valeurs que nous avons
‫utilisées auparavant et je dois également changer le nom ici.
‫D'accord, donc pour le moment, notre remise est supérieure au prix et nous
‫devrions donc obtenir notre erreur.
‫Bon et effectivement, nous avons une erreur de validation.
‫Donc échoué pour la remise du prix du chemin.
‫Maintenant, nous n'avons aucun message personnalisé ici et
‫résolvons donc rapidement cela.
‫Très bien et la façon dont nous le faisons est très similaire à
‫celle que nous avons faite avec l'énumération.
‫Nous devons donc spécifier un autre objet, puis
‫définir la propriété message.
‫Validate
‫devrait être un objet,
‫puis nous avons notre message là-dedans
‫et cette fonction ici vivra
‫dans une propriété appelée validator.
‫D'accord et notre message ici sera
‫(claquement du clavier) le prix de remise
‫devrait être
‫inférieur
‫au prix régulier.
‫Ici, nous avons besoin d'une virgule et maintenant nous sommes bons.
‫Et en fait, une astuce très intéressante est que ce message
‫ici a également accès à la valeur.
‫Et cela fonctionne d'une manière étrange et c'est
‫vraiment interne à Mongoose, donc cela n'a
‫rien à voir avec
‫JavaScript donc je peux simplement utiliser les accolades ici et ensuite value.
‫Donc, cette pièce ici aura accès à
‫la valeur qui a été entrée,
‫elle a donc exactement la même valeur que cette variable val.
‫Alors testons cela
‫à nouveau et maintenant en effet,
‫nous obtenons notre message et même accès au prix 250 que nous avons spécifié ici.
‫Maintenant, changeons-le en 100 et maintenant cela devrait fonctionner et
‫oui, c'est le cas.
‫Tellement bon.
‫Maintenant, il y a une mise en garde très
‫importante que nous devons noter
‫ici et c'est qu'à l'intérieur d'une fonction de validation,
‫ce mot clé ne va pointer vers
‫le document actuel
‫que lorsque nous créons un nouveau document.
‫Donc, cette fonction ici ne fonctionnera pas sur la mise à jour.
‫Et c'est donc très important de le noter.
‫Vous voyez, que dans Mongoose, il y a quelques mises
‫en garde dont vous devez vraiment
‫être conscient lorsque vous travaillez avec.
‫Et j'ai appris tout cela par expérience et
‫c'est pourquoi maintenant je suis capable de vous les raconter.
‫J'ai donc rencontré une erreur une fois avec celui-ci et
‫donc à partir
‫de ce moment-là, je sais que je ne peux
‫utiliser ce type de validateur qu'avec
‫ce mot-clé lorsque je crée de nouveaux documents.
‫Alors laissez-moi l'écrire ici pour vous.
‫(claquement du clavier) Très bien, alors
‫j'espère que vous prenez en quelque sorte
‫note de toutes ces petites informations très importantes qui
‫sont très importantes.
‫La même chose ici.
‫Rappelez-vous que là où je vous
‫ai dit que ce DOCUMENT MIDDLEWARE ne fonctionne vraiment que pour la sauvegarde et
‫la création, mais pas pour la mise à jour.
‫Et c'est l'une de ces autres choses
‫qu'il est vraiment important de ne jamais oublier.
‫Maintenant, dans ce cas spécifique
‫ici, il existe en fait des moyens de résoudre ce problème, mais
‫ils sont très compliqués et ne valent pas vraiment la peine d'être poursuivis.
‫Et nous pourrions bien sûr également écrire des fonctions de
‫validation qui ne reposent pas sur une variable this.
‫Donc, dans ce cas, nous n'en avons besoin que
‫parce que nous comparons une valeur avec la valeur d'un autre champ.
‫Il s'agit d'un validateur personnalisé que nous pouvons utiliser dans
‫Mongoose et que nous avons écrit nous-mêmes.
‫Mais aussi, il existe quelques bibliothèques sur npm
‫pour la validation des données que nous pouvons simplement brancher
‫ici en tant que validateurs personnalisés que nous n'avons pas à écrire nous-mêmes.
‫Et la bibliothèque la plus populaire s'appelle validateur et
‫jetons donc un coup d'œil à celle-ci.
‫Validator, puis je recherche GitHub
‫car généralement toutes ces bibliothèques sont toujours sur GitHub.
‫Et la documentation sera également là et
‫vous voyez donc ici
‫que le validateur
‫est une bibliothèque de validateurs et de désinfectants de chaînes.
‫Vous voyez aussi que c'est assez populaire avec 13,00 étoiles
‫et donc
‫c'est très bien.
‫Nous voyons également que cette bibliothèque valide
‫et nettoie uniquement les chaînes.
‫Voici ensuite toutes les choses comment nous
‫l'installons et comment nous l'utilisons, mais c'est assez simple.
‫Nous le savons déjà.
‫Mais ce que je veux vous
‫montrer, c'est la liste de tous les validateurs disponibles.
‫Par exemple, nous avons isAlpha, qui
‫va vérifier si la chaîne ne contient que des lettres.
‫Nous avons alphanumérique donc seulement des lettres et des chiffres et nous
‫avons vraiment beaucoup de choses ici.
‫Vérifiez donc si une chaîne est
‫boolienne, ou vérifiez si la chaîne est une carte de crédit,
‫donc un numéro de carte de crédit valide.
‫Ou si c'est une monnaie
‫ou si vous voyez vraiment toutes sortes de tests différents.
‫Par exemple un ISBN, donc pour vérifier les numéros de livre.
‫Pour tester s'il s'agit d'un entier ou si la chaîne est en minuscule.
‫Et donc vous voyez, chaque fois que vous avez besoin d'une validation
‫de données, vous pouvez récupérer l'une
‫de ces bibliothèques et les brancher simplement sur vos validateurs Mongoose.
‫Maintenant, beaucoup de choses qui
‫sont ici sont en fait déjà intégrées
‫dans Mongoose et nous n'avons donc pas besoin de toutes,
‫d'accord, mais il y en a une
‫très spécifique, que je veux utiliser, qui est isAlpha.
‫Je veux donc vérifier si le nom de la tournée ne contient que des lettres.
‫Et donc pour cela je peux utiliser cette
‫fonction de la bibliothèque du validateur.
‫Revenons en
‫arrière et commençons
‫par
‫installer le validateur
‫npm i (claquage
‫du clavier).
‫C'était réussi.
‫Ensuite, je dois
‫l'importer ici et maintenant nous sommes prêts à l'utiliser ici.
‫Je vais l'utiliser
‫ici et encore, j'utilise la propriété validate et
‫maintenant tout ce que j'ai
‫à faire est de vraiment brancher la fonction ici.
‫Et dans validator, cela fonctionne comme ceci, où
‫validator est un objet et
‫là-bas nous avons alors toutes ces méthodes.
‫Le validateur est
‫Alpha, c'est
‫donc celui
‫que nous venons de
‫choisir dans la documentation.
‫Et c'est en fait ça.
‫Donc, nous ne l'appelons pas ici.
‫Nous spécifions simplement qu'il
‫s'agit d'une fonction qui doit être utilisée.
‫Tout comme le nôtre, comme notre propre validateur, nous ne l'avons
‫pas appelé.
‫On met simplement cette fonction de rappel ici
‫qu'elle va être
‫appelée dès que les données devraient être validées.
‫Et donc ici, c'est pareil.
‫Maintenant, si nous voulons spécifier un message
‫d'erreur, cela fonctionne exactement comme ici.
‫Nous pouvons spécifier un tableau, puis le message d'erreur après
‫la fonction de rappel.
‫Et nous aurions pu le faire ici.
‫Alors ici, nous l'avons fait différemment.
‫Ici, nous avons ensuite créé ce nouvel
‫objet avec un validateur et le message, mais nous
‫aurions également pu le faire avec un
‫tableau, mais cela aurait semblé étrange.
‫Mais ici, puisque la fonction est si petite, donc
‫c'est si petit, nous pouvons simplement la mettre ici, puis
‫en tant que deuxième argument dans le tableau,
‫ajouter le message d'erreur.
‫Le nom de la tournée
‫ne doit contenir que (claquement du clavier) personnages.
‫Super, regarde ça.
‫De retour dans Postman ici, débarrassons-nous de notre remise de prix.
‫Et ajoutons un certain nombre ici.
‫Et donc cela devrait alors échouer au
‫test et en effet, le nom ne doit contenir que des caractères.
‫Débarrassons-nous de ça.
‫Nous ne pouvons pas non plus utiliser ce nom.
‫Nous l'avons déjà utilisé auparavant,
‫donc cela peut aussi être écrit ici avec des
‫caractères et nous obtenons toujours cette erreur ici.
‫Eh bien, c'est probablement à cause des espaces.
‫Alors débarrassons-nous simplement des espaces, ce qui
‫bien sûr ne va pas être vraiment utile et
‫en effet, maintenant cela fonctionne.
‫Donc le problème était les espaces,
‫mais évidemment nous voulons garder les espaces ici.
‫En fait, cette erreur de validation n'est pas vraiment utile et je
‫vais donc m'en débarrasser.
‫Considérez qu'il s'agissait ici uniquement de démontrer que nous
‫pouvons utiliser une bibliothèque externe comme celle-ci
‫pour effectuer la validation.
‫Et en fait, nous utiliserons toujours cette bibliothèque un
‫peu plus tard lorsque nous vérifierons si l'e-mail de l'utilisateur est réellement valide.
‫C'est donc une autre fonction
‫intéressante qui est incluse dans cette bibliothèque.
‫Donc encore une fois, c'est comme ça que ça marche.
‫Pas vraiment utile dans ce cas,
‫donc si nous voulions vraiment
‫tester si la chaîne ne contient que des lettres et des espaces,
‫il serait probablement
‫plus simple d'utiliser simplement une expression régulière pour
‫tester ce type de modèle.
‫Mais je ne vais
‫pas le faire ici car cette conférence
‫portait davantage sur ces validateurs personnalisés.
‫Quoi qu'il en soit, avec cette conférence, nous sommes maintenant
‫prêts avec l'introduction à Mongoose.
‫Maintenant, comme vous pouvez l'imaginer, il y a
‫bien sûr encore beaucoup à apprendre sur Mongoose
‫et en fait, nous avons une section avancée Mongoose un peu
‫plus tard dans le
‫cours et bien sûr aussi dans les
‫autres sections, vous continuerez à en
‫apprendre de plus en plus sur
‫comment utiliser Mongoose de manière vraiment professionnelle.
‫Vous avez déjà tellement appris jusqu'à présent,
‫donc un grand bravo pour être arrivé jusqu'ici et c'est super
‫de voir que vous êtes toujours avec moi ici.
‫Très bon travail et j'espère à bientôt.