‫Instructeur : Vous avez
‫donc déjà appris à créer de nouveaux documents dans la base de données.
‫Mais dans cette conférence, je
‫vais vous montrer une façon plus simple et encore meilleure de le
‫faire, alors que nous implémentons notre gestionnaire de tournées create.
‫Donc, à ce stade,
‫notre API ne fait plus rien.
‫Cela ne fonctionne plus
‫car en gros, nous avons supprimé toutes les fonctionnalités
‫que nous avions dans la dernière vidéo.
‫Et nous l'avons fait, de sorte qu'au cours des deux
‫prochaines conférences, nous puissions le reconstruire en utilisant une vraie base de données.
‫D'accord, donc en gros, construisons enfin notre vraie API.
‫Et nous allons commencer par
‫implémenter la fonction createTour.
‫Mais souvenez-vous simplement de la fonction de
‫gestionnaire qui est appelée dès qu'il y a une demande
‫de publication sur l'itinéraire des visites.
‫C'est donc ce que nous avons ici dans tourRoutes.
‫Mettons donc ça ici.
‫Donc ce que je viens de dire est ceci.
‫Nous avons donc ce checkBody ici.
‫Ce qui est en
‫fait quelque chose que nous pourrons également supprimer.
‫Alors où est-ce, en fait ?
‫checkBody bien,
‫c'est donc une autre de ces fonctions dont nous
‫n'avons vraiment plus besoin.
‫Parce que c'était essentiellement pour valider le corps.
‫Donc, pour voir s'il y avait le nom ou la propriété de prix en eux.
‫Droit?
‫Mais maintenant, notre modèle
‫de mangouste va s'occuper de ça.
‫Et encore une fois, c'était
‫bien de nous montrer comment fonctionne un middleware, mais
‫maintenant nous pouvons nous en débarrasser.
‫D'accord, et je vais donc le supprimer d'ici aussi.
‫Donnez-lui une nouvelle sauvegarde.
‫Et c'est maintenant de retour au travail.
‫Quoi qu'il en soit, la fonction
‫que nous créons maintenant est cette fonction createTour.
‫Où seules les données seront appelées
‫dès que quelqu'un arrivera sur l'itinéraire de la tournée avec une demande de publication.
‫D'accord, donc juste pour récapituler cela parce
‫que je sais que cela peut
‫être un peu déroutant avec ces différents fichiers et
‫différents dossiers et différentes fonctions.
‫Mais il est également très
‫important que nous commencions à organiser notre code
‫dès le début.
‫D'accord?
‫Quoi qu'il en soit, nous sommes ici dans la fonction createTour.
‫Et donc créons maintenant une nouvelle tournée.
‫Et nous allons le faire en fonction
‫des données provenant du corps.
‫Vous vous en souvenez ?
‫Rappelez-vous maintenant comment nous avions l'habitude de créer des documents
‫il y a quelques conférences.
‫Alors on a fait comme ça.
‫Par exemple, disons newTour puis
‫égal à newTour
‫puis les données qu'il contient.
‫Alors on a fait comme ça et puis c'est une nouvelle tournée.
‫Et puis nous tapons newTour. enregistrer et
‫cela fonctionne plutôt bien.
‫Mais nous pouvons le faire d'une manière encore plus facile.
‫Donc, au lieu de faire cela, nous
‫pouvons faire Tour. créez et collez les données là-dedans.
‫D'accord et cela fera exactement la même chose.
‫La principale différence est que dans cette version
‫ici, nous appelons essentiellement la méthode directement sur la tournée
‫alors que dans cette première version, nous appelions la méthode
‫sur le nouveau document.
‫D'accord, et c'est donc complètement différent.
‫Donc encore une fois, nous avons eu la tournée que nous avons créée
‫à partir du modèle.
‫Et puis lors de cette tournée, nous avons utilisé la méthode de sauvegarde.
‫Parce que le document a accès à cette méthode
‫et à beaucoup d'autres méthodes également.
‫Mais ici, dans la deuxième situation,
‫nous appelons cette méthode de création directement sur le modèle lui-même, d'accord ?
‫Rappelez-vous maintenant comment cette méthode de sauvegarde ici a renvoyé une promesse.
‫Et donc, cette création ici renvoie également une promesse.
‫Et donc pour avoir accès au fichier document tel qu'il
‫a été créé dans la base
‫de données, nous aurions alors utilisé . alors ok?
‫Mais au lieu d'utiliser des promesses comme celle-ci, je
‫vais commencer à utiliser async wait.
‫Bien.
‫Donc, cette fonction ici devrait être une fonction asynchrone.
‫Donc tout ce que nous
‫avons à faire est d'écrire async juste ici.
‫Nous avons donc async et nous pouvons maintenant attendre le résultat de
‫cette promesse ici.
‫J'espère donc que vous êtes familier avec cela.
‫Et j'ai en fait une section dans
‫ce cours qui traite exactement de ce genre de choses.
‫Donc, si vous n'avez pas
‫regardé cette section mais que vous n'êtes toujours pas familiarisé à 100% avec
‫async wait, alors allez-y et regardez cette section
‫afin que vous compreniez vraiment ce qui se passe ici.
‫D'accord, donc au lieu d'utiliser ceci, je vais utiliser ici
‫async wait, puis enregistrer la
‫valeur du résultat de cette promesse dans la
‫nouvelle variable de tournée.
‫D'accord, maintenant la dernière pièce du puzzle
‫consiste bien sûr à transmettre des données réelles dans cette méthode de création.
‫Et donc au lieu de cet
‫objet vide, nous allons passer dans le corps de
‫la requête donc req. body et ce sont donc les
‫données fournies avec la demande de publication, n'est-ce pas ?
‫Maintenant encore une
‫fois, juste pour vous assurer que tout est clair pour vous.
‫D'accord, nous pouvons donc utiliser le modèle de tournée directement
‫et appeler la méthode create dessus.
‫Ensuite, dans cette fonction, nous passons les données que
‫nous voulons stocker dans la base de données en tant que nouveau tour.
‫Et ces données proviennent du corps du message, n'est-ce pas ?
‫Et c'est donc stocké à l'intérieur du corps du point de demande.
‫Donc cette variable ici.
‫Maintenant, cette méthode ici renverra alors une promesse.
‫Et nous attendons cette promesse en
‫utilisant async wait, puis stockons ce résultat dans
‫la variable newTour qui sera
‫le document nouvellement créé déjà avec l'ID et tout, d'accord ?
‫Je vais donc garder
‫ce code ici juste comme référence.
‫Et pour l'instant, récupérons cette donnée ici.
‫Morceau de code en fait.
‫Donnez-lui une sauvegarde.
‫Et maintenant, nous obtenons cette erreur de charpie ES.
‫Jetons donc un coup d'œil
‫à cela, mettez simplement notre souris ici.
‫Et cela nous dit que les fonctions asynchrones ne sont pas prises en
‫charge jusqu'à ce nœud 7. 6 et donc cette erreur
‫ES Lint vient de ce plugin de nœud que nous
‫avons réellement installé.
‫Vous pouvez donc le voir ici.
‫D'accord, donc ce que nous allons faire pour résoudre ce problème, c'est
‫simplement aller au package. json et vous
‫trouverez ici la version du
‫nœud que nous utilisons réellement.
‫C'est donc très simple.
‫Nous avons juste besoin de spécifier la propriété
‫des moteurs ici dans notre document json.
‫Et définissez le nœud sur supérieur ou
‫égal à 10.
‫D'accord, et c'est parce que dans
‫ce cours, nous utilisons au moins le nœud dix.
‫Donc 7. 6 suffirait pour faire disparaître cette erreur
‫mais bien sûr nous spécifions la version réelle
‫que nous utilisons réellement.
‫Nous donnons donc à celui-ci une sauvegarde.
‫Ferme ça.
‫Et maintenant, notre erreur ici est en fait partie.
‫Maintenant, juste une étape de plus avant de pouvoir
‫l'essayer dans notre application Postman.
‫Et c'est que nous devons en fait gérer les erreurs.
‫D'accord, et gardez à l'esprit qu'avec async wait,
‫nous devons tester les erreurs à l'aide de la syntaxe try catch.
‫Nous écrivons donc un bloc try.
‫Ensuite, encapsulez tout notre code là-dedans.
‫Et puis enfin un bloc catch.
‫Qui, comme nous le savons déjà, a accès à l'objet d'erreur.
‫Et maintenant, qu'est-ce qu'on met vraiment ici ?
‫Eh bien, nous devons
‫penser à quand exactement une erreur peut se produire.
‫Alors rappelez-vous comme il y a
‫deux conférences lorsque nous créions nos premiers documents.
‫Nous avons eu une
‫erreur à l'époque lorsque nous avons essayé de
‫créer un document sans l'un des champs obligatoires, n'est-ce pas ?
‫Et c'était donc une erreur de validation.
‫Et c'est l'une des erreurs qui seraient détectées ici.
‫D'accord, car si nous essayions de créer
‫un document, disons sans l'un des
‫champs obligatoires, cette promesse
‫créée ici serait rejetée, d'accord ?
‫Et donc si nous avons une promesse
‫rejetée ici, elle entrera dans le bloc catch.
‫Et donc, fondamentalement, dans ce bloc catch ici,
‫nous voulons renvoyer une réponse
‫indiquant qu'il y a eu une erreur.
‫D'accord donc rés. statut ici encore et
‫400 qui signifie mauvaise demande. json et maintenant quelque chose de très similaire
‫à celui-ci,
‫mais son état et c'est l'échec,
‫puis au lieu de données ici, nous envoyons
‫un message et pour l'instant, définissons simplement le message sur l'erreur.
‫Bien.
‫Et
‫revenons enfin à notre application Postman et essayons-la.
‫D'accord, alors créez celui-ci et créons
‫maintenant une nouvelle tournée.
‫Donc, pour le moment, nous
‫avons ici la
‫difficulté et le prix de la durée du nom
‫et ajoutons donc également la note
‫et cela doit être entre guillemets 4. 7.
‫Très bien, et maintenant vient le moment.
‫Envoyez et en effet c'est parti.
‫C'est donc la tournée que nous
‫venons de créer.
‫Nous avons notre note.
‫Nous avons notre nom et nous avons notre prix.
‫Et bien sûr l'ID créé automatiquement.
‫Maintenant, vous remarquerez peut-être que nous n'avons aucune difficulté
‫et aucun prix.
‫Eh bien, pourquoi pensez-vous que c'est?
‫Eh bien, c'est parce que ces deux champs ne sont en
‫fait pas dans notre schéma et donc ils
‫ne sont pas mis dans la base de données.
‫Ainsi, tout le reste qui n'est pas dans
‫notre schéma est simplement ignoré.
‫C'est donc ça le pouvoir de notre schéma, d'accord ?
‫Super, maintenant essayons de l'envoyer à nouveau et cela devrait
‫nous donner une erreur, n'est-ce pas ?
‫Et en effet, nous y voilà.
‫Nous avons notre 400 mauvaise demande.
‫Et nous avons ce message qui est l'erreur
‫complète que nous avons eue.
‫Et donc ici, nous voyons que le message d'erreur est une clé en double.
‫Et c'est parce que nous avons déjà le Test Tour 2.
‫Et donc il ne pouvait pas en créer un autre.
‫Alors créons-en un autre ici comme Jonas Tour.
‫Ça n'a pas vraiment d'importance, d'accord ?
‫Je veux juste le créer,
‫d'abord sans rien de tout cela juste
‫pour voir si nous obtenons une autre erreur.
‫Et en effet, nous obtenons quelques erreurs supplémentaires ici.
‫Cette fois-ci en disant que la validation de la
‫tournée a échoué car une tournée
‫doit avoir un prix.
‫D'accord, alors vous voyez qu'en ce moment
‫nous avons ce genre de structure d'erreur étrange ici.
‫Mongo DB restitue donc cet énorme objet d'erreur complet.
‫Et plus tard, on s'occupera de ça.
‫Nous aurons donc une section entière sur la gestion des erreurs uniquement.
‫Et d'ici là, nous créerons des erreurs plus significatives.
‫D'accord, pour l'instant, remplaçons simplement cet objet
‫d'erreur par une chaîne normale ici.
‫Disons donc que des données invalides sont envoyées.
‫D'accord, alors ne faites pas quelque chose comme ça dans une vraie application de production,
‫mais encore une fois, nous aurons une
‫vraie gestion des erreurs un peu
‫plus tard, ce qui va s'occuper de cela.
‫D'accord, donc afficher des erreurs significatives pour le client.
‫Revenons donc ici, envoyez-le à
‫nouveau.
‫Et maintenant, nous obtenons cette chaîne normale ici.
‫Alors créons simplement le prix ici.
‫Fixons-le à 567 puis
‫envoyons-le.
‫Et maintenant, vous verrez que notre évaluation
‫par défaut ici fonctionne toujours.
‫Voyons maintenant tout cela dans la boussole également.
‫Et en effet, nous obtenons nos quatre tournées dans la base de données.
‫Donc, tous ces tests étranges que nous
‫avons effectués jusqu'à présent.
‫Alors allons-y et supprimons ces deux derniers.
‫C'était vraiment juste pour tester.
‫Bien.
‫Donc quelque chose s'est mal passé ici, je suppose.
‫Bon, maintenant nous revenons à ces deux-là.
‫Créons maintenant le troisième que nous avions auparavant
‫dans la dernière section.
‫Qui est l'aventurier des neiges.
‫Donc l'aventurier des
‫neiges.
‫Le prix était...
‫Je ne suis
‫plus sûr comme 697 peut-être.
‫Et la note
‫est comme six ou en fait 4. 8.
‫J'ai envoyé ce type.
‫Et donc en effet, nous y voilà.
‫Super.
‫Juste pour récapituler rapidement notre fonction createTour.
‫Nous avons donc une capture d'essai ici parce que nous utilisons en
‫fait une fonction d'attente asynchrone ici.
‫D'accord, nous utilisons donc async wait parce que
‫cette tournée. create renvoie une
‫promesse que nous attendons
‫afin que nous puissions ensuite stocker le document
‫de visite nouvellement créé à l'intérieur
‫de cette variable, puis l'envoyer
‫avec la réponse au client ici.
‫D'accord, mais en cas d'erreur, comme une
‫erreur de validation par exemple,
‫cette erreur sera détectée
‫et nous renverrons autre chose
‫au client avec ce message d'erreur.
‫C'est ainsi que nous créons des documents à l'aide de mangouste.
‫Ensuite, nous allons parler de la lecture de documents.