‫Instructeur masculin : Enfin,
‫gérons maintenant les erreurs de validation de Mongoose.
‫Alors, rappelez-vous comment nous avons essayé de mettre à jour une
‫visite avec des données invalides
‫ici, puis avons obtenu ce genre d'erreur ?
‫D'accord.
‫Et essayons en fait d'en ajouter un autre.
‫Alors un nom vraiment court, d'accord ?
‫Et parce que ce n'est pas permis, encore une fois.
‫Oh et maintenant nous ne pouvons plus voir notre erreur
‫parce que nous sommes maintenant en production.
‫Et bien sûr, cette erreur en ce
‫moment n'est pas gérée correctement.
‫Il n'est pas marqué comme opérationnel.
‫Et donc,
‫rappelez-vous que nous obtenons ce genre de message d'erreur générique en retour.
‫D'accord?
‫Donc juste pour voir l'erreur que nous avons eue
‫auparavant, revenons rapidement au développement.
‫Alors npm commence.
‫Et, envoyez-le maintenant
‫à nouveau.
‫Et maintenant, nous récupérons nos erreurs de développement, d'accord ?
‫Parce que maintenant,
‫je veux vous montrer comment nous pouvons réellement créer un message d'erreur
‫significatif basé sur tout cela, ce que nous avons ici.
‫Maintenant à droite.
‫Donc, à l'intérieur de
‫notre erreur, nous obtenons une propriété d'erreur.
‫Et cette propriété elle-même est
‫un objet qui contient beaucoup d'objets, et
‫chacun d'eux est pour l'un des champs qui a une erreur.
‫D'accord?
‫Donc, le premier ici est pour la durée de la tournée.
‫Ensuite, le second est pour la
‫difficulté, c'est aussi faux.
‫Et le troisième est pour la note, d'accord ?
‫Donc, chacun d'eux a en fait un beau message d'erreur, d'accord ?
‫Donc en gros celui que nous avons défini dans notre schéma Mongoose.
‫Et maintenant, nous voulons extraire ces
‫trois messages d'ici, et
‫les mettre tous dans une seule chaîne, d'accord ?
‫Alors allons-y et faisons-le.
‫D'accord.
‫Et encore
‫une fois, je vais commencer par créer le conditionnel ici.
‫Donc si (erreur),
‫et en fait, jetons un coup d'œil.
‫Nous avons donc ici l'erreur.
‫Nous avons les erreurs, toutes.
‫Et je dois faire défiler ici.
‫Et oui, alors voici le nom.
‫Donc erreur. le nom est ValidationError, d'accord ?
‫Alors saisissons cela.
‫D'accord.
‫Et encore une fois, c'est une erreur créée par Mongoose.
‫Donc, tout comme
‫le premier, et donc ils se ressemblent, d'accord.
‫Maintenant, je ne veux pas de ça ici.
‫Mais à la
‫place, je veux que l'erreur soit égale à
‫handleValidationErrorDB et envoie l'erreur, d'accord ?
‫Maintenant, copions ceci à nouveau.
‫D'accord.
‫Et encore une fois, commençons simplement par créer notre message.
‫Données d'entrée invalides.
‫Et puis retournons également l'erreur.
‫Donc nouvelle AppError (message, 400).
‫Donc VS Code a
‫déjà reconnu que je voulais taper juste ça, d'accord ?
‫Maintenant, afin de créer une
‫grande chaîne à partir de toutes les chaînes
‫de toutes les erreurs, nous devons essentiellement parcourir
‫tous ces objets, puis extraire tous les messages d'erreur dans un nouveau tableau.
‫Alors, encore une fois, jetons un coup d'œil à cela.
‫D'accord.
‫Donc l'objet qui contient tous les objets
‫contient des erreurs, d'accord ?
‫Nous avons donc une erreur pour le nom, une pour
‫la difficulté et une pour les notes moyennes.
‫Et donc nous allons essentiellement boucler sur cet objet d'erreurs.
‫D'accord?
‫Et en JavaScript, nous utilisons Object. valeurs afin
‫de boucler essentiellement sur un objet.
‫Donc les éléments d'un objet.
‫D'accord?
‫Créons donc ici une variable appelée error, qui sera à
‫nouveau un tableau de tous
‫les messages d'erreur pour le moment,
‫et maintenant Object. valeurs.
‫Et donc nous voulons les valeurs d'erreur. erreurs, d'accord ?
‫Et maintenant, passez-les en boucle à l'aide d'une carte.
‫Et puis à
‫chaque itération, nous allons simplement renvoyer le message d'erreur, d'accord ?
‫Donc juste pour être sûr que nous sommes tous sur la
‫même longueur d'onde ici, l'Objet. les valeurs sont ces objets, d'accord ?
‫Alors cet objet, et cet objet, et le suivant, d'accord ?
‫Voilà donc les valeurs.
‫Et maintenant il
‫ne nous reste plus qu'à faire pour extraire
‫le message, c'est-à-dire la valeur. message, d'accord ?
‫Donc . un message.
‫Donc, fondamentalement, la valeur actuelle, ou
‫disons l'élément actuel,
‫j'aime utiliser element pour cela, et
‫nous voulons retourner el. un message.
‫D'accord.
‫Et maintenant, bien sûr, cela ne devrait pas être ici.
‫Et vous l'aviez probablement déjà remarqué.
‫Donc en fait, c'est ici qu'on veut ça, d'accord ?
‫Et maintenant, tout ce que
‫nous avons à faire est de saisir ceci dans notre chaîne de message, d'accord ?
‫Donc des erreurs, et maintenant nous les rassemblons simplement en
‫une seule chaîne en utilisant un point puis un espace, d'accord ?
‫Et vous verrez, dans une seconde, pourquoi.
‫D'accord.
‫Revenons donc à la production ici.
‫Exécutez donc notre script de démarrage de la production.
‫Essayez-le à nouveau maintenant et attendons, et bam
‫!
‫Nous y voilà!
‫Donc données d'entrée invalides.
‫Ensuite, la première chaîne d'erreur, doit avoir
‫plus ou égal à 10 caractères.
‫Puis le
‫deuxième, et le troisième.
‫Parfait.
‫Et c'est pourquoi j'ai utilisé le point et l'espace, d'accord ?
‫Donc, pour séparer ces trois chaînes avec un point
‫et un espace, d'accord ?
‫Et maintenant, cela ressemble à un message d'erreur
‫très bien formaté que tout le monde peut facilement comprendre.
‫Droit?
‫Donc, nous avons essentiellement terminé ici.
‫D'accord.
‫Maintenant, nous aurions pu rendre cette erreur, erreur
‫de gestion, beaucoup plus complète encore.
‫Par exemple, nous pourrions définir différents niveaux de gravité d'erreur comme dire,
‫cette erreur n'est pas si importante, cette
‫erreur est moyennement importante
‫et cette erreur est très importante ou même critique.
‫Et nous pourrions également envoyer un e-mail à un administrateur
‫au sujet des erreurs critiques.
‫Et vraiment, il y a beaucoup de choses que nous pourrions mettre en œuvre.
‫Mais encore une fois, dans une sorte de petite application comme celle-ci, ce
‫que nous avons ici est déjà vraiment bien, d'accord ?
‫C'est donc une stratégie assez solide que
‫nous avons déjà mise
‫en œuvre ici, et j'en suis vraiment satisfait, d'accord ?
‫Donc toute cette logique ici avec les erreurs opérationnelles
‫que nous avons implémentées
‫ici, donc c'est déjà assez sophistiqué.
‫D'accord?
‫Maintenant, si jamais nous devions trouver une autre erreur que
‫nous voulons marquer comme opérationnelle, alors bien sûr,
‫tout ce que nous aurions à
‫faire est quelque chose de similaire à ce que nous avons ici, d'accord ?
‫Donc, en gros, implémentez une autre fonction pour celle-ci,
‫puis renvoyez notre propre erreur opérationnelle afin
‫que la production d'erreur d'envoi
‫puisse ensuite envoyer cette erreur opérationnelle au client,
‫n'est-ce pas ?
‫D'accord, et cela étant dit,
‫notre contrôleur d'erreur est en fait terminé.
‫Mais il y a encore d'autres erreurs que
‫nous devons gérer qui sont complètement en dehors de Mongo ou même d'Express.
‫Et donc nous le faisons dans le reste de cette section.