Le cours Express.js - Module 7 : validation de mangouste | Shivendra Raghuvanshi | Skillshare
Recherche

Vitesse de lecture


1.0x


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

Le cours Express.js - Module 7 : validation de mangouste

teacher avatar Shivendra Raghuvanshi, Lead Developer and Online Teacher

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction du cours

      1:59

    • 2.

      Mettre en œuvre la validation dans Mongoose

      7:40

    • 3.

      Utiliser des validateurs de mangouste intégrés

      5:02

    • 4.

      Créer des validateurs personnalisés dans Mongoose

      3:16

    • 5.

      Gérer les erreurs de validation dans Mongoose

      3:24

    • 6.

      Options de type de schéma et personnalisation dans Mongoose

      5:36

    • 7.

      Restructurer notre projet FareWheels

      6:14

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

2

apprenants

--

projet

À propos de ce cours

Module 7 : validation de mangue plonge dans l'un des aspects les plus cruciaux du développement backend : la validation des données. Dans ce module, vous apprendrez à garantir l'intégrité et la fiabilité des données de votre application avec Mongoose. Vous explorerez les validateurs intégrés, créerez une logique de validation personnalisée et traiterez les erreurs avec élégance. À la fin de ce module, vous serez en mesure de mettre en œuvre des techniques de validation robustes qui amélioreront la stabilité de votre application et l'expérience utilisateur.

Ce que vous apprendrez

  • Comment mettre en œuvre la validation dans les schémas Mongoose pour assurer l'intégrité des données.
  • Utiliser les validateurs intégrés de Mongoose pour appliquer les contraintes.
  • Créer des validateurs personnalisés adaptés aux besoins spécifiques de votre application.
  • Gérer et répondre efficacement aux erreurs de validation.
  • Personnaliser les options de type de schéma pour répondre aux exigences en matière de données.

Nous allons également restructurer l'application FareWheels pour intégrer ces techniques de validation dans des scénarios réels.

Rencontrez votre enseignant·e

Teacher Profile Image

Shivendra Raghuvanshi

Lead Developer and Online Teacher

Enseignant·e
Level: All Levels

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

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é.