‫Jonas : Implémentons maintenant un gestionnaire de
‫route pour les requêtes de publication afin que nous puissions réellement ajouter un Natour à
‫notre ensemble de données.
‫Donc, tout comme avec le gestionnaire de
‫requêtes doGET(), commençons par ajouter une nouvelle route.
‫Donc appli. post cette fois, et rappelez-vous
‫maintenant que nous utilisons post donc la méthode
‫post ici, car c'est le genre de demande que nous voulons gérer.
‫Donc, les requêtes qui sont faites avec le verbe http post, n'est-ce pas ?
‫V1
‫et visites.
‫Tout comme nous en avons parlé dans la conférence sur l'API REST,
‫l'URL est en fait exactement la même.
‫Peu importe si nous voulons obtenir toutes les visites
‫ou si nous voulons créer une nouvelle visite,
‫l'URL est exactement la même.
‫Ensuite, la seule chose qui change est la méthode http
‫que nous avons utilisée pour faire ces requêtes.
‫Pour obtenir toutes les visites et publier pour créer une
‫nouvelle visite, puis ici, notre fonction de rappel
‫typique où nous avons accès à
‫la demande et à l'objet de réponse afin que nous puissions
‫obtenir des données de la demande et renvoyer un réponse.
‫N'oubliez pas qu'avec une demande de
‫publication, nous pouvons envoyer des données du client au serveur, n'est-ce pas ?
‫Ces données sont alors idéalement disponibles sur la demande.
‫L'objet de requête est à nouveau ce qui contient toutes les données,
‫toutes les informations concernant la requête qui a été effectuée.
‫Si cette demande contient des données qui ont
‫été envoyées, ces données devraient figurer sur la demande, n'est-ce pas ?
‫Désormais prêt à l'emploi, Express ne met pas ces données corporelles
‫sur la demande, et pour que ces données soient disponibles, nous
‫devons utiliser quelque chose appelé middleware.
‫Nous allons parler en détail du middleware dans
‫quelques conférences, mais pour l'instant, pour
‫que cela fonctionne, nous
‫devons inclure un middleware simple ici en haut du fichier.
‫Donc en fait, juste ici.
‫Ce que nous devons faire, c'est dire app. utiliser puis exprimer.
‫json D'accord, et c'est tout.
‫Encore une fois, ce [express. json] voici un middleware.
‫Et le middleware est essentiellement une
‫fonction qui peut modifier les données de demande entrantes.
‫On l'appelle middleware car il se situe
‫entre, donc au milieu de la demande et de la réponse.
‫C'est juste une étape par laquelle la demande passe
‫pendant qu'elle est en cours de traitement.
‫Et l'étape par laquelle passent les demandes, dans
‫cet exemple, est simplement que les données du corps y sont ajoutées.
‫Il est donc ajouté à l'objet de requête
‫en utilisant ce middleware.
‫Nous utilisons l'application. utiliser pour utiliser un middleware comme celui-ci.
‫Et encore une fois, nous parlerons beaucoup
‫plus de middleware un peu plus loin dans cette section.
‫Pour l'instant, sachez simplement que c'est ainsi que nous utilisons le middleware.
‫Tous les détails suivront plus tard.
‫Donc pour l'instant, juste pour commencer, je
‫veux réellement vous montrer les données du corps dans la console,
‫juste pour vérifier que cela fonctionne réellement, donc req. corps.
‫Encore une fois, body est la
‫propriété qui sera disponible sur la demande, car nous
‫avons utilisé ce middleware il y a quelques instants.
‫Nous voulons donc log[req. body] à la console,
‫puis nous devons également renvoyer une réponse.
‫Donc rés. envoyer et pour l'instant juste un espace réservé ici.
‫Juste 'Terminé' d'accord.
‫Nous devons donc
‫toujours renvoyer quelque chose afin de terminer
‫le cycle de demande/réponse, sur lequel nous allons encore une fois en apprendre
‫un peu plus plus tard dans cette section.
‫Alors testons maintenant cela
‫et créons une nouvelle demande pour le poste.
‫Maintenant, ici dans Postman, nous pouvons faire quelque
‫chose de vraiment sympa qui consiste à enregistrer toutes ces demandes.
‫Je vais commencer par
‫créer une nouvelle collection, que j'appellerai Natours.
‫Nouvelle collection.
‫Maintenant, je vais enregistrer cette demande dans cette collection.
‫Alors celui-ci est Get all the Tours.
‫Mettez-le dans Natours et économisez.
‫Alors maintenant, nous avons nos demandes Get ici.
‫Eh bien, copions maintenant celui-ci ici, créons-en
‫un nouveau.
‫Donc celui-ci est une demande de poste.
‫Avant de le faire,
‫je vais également l'enregistrer directement dans cette collection.
‫Alors créez une nouvelle visite.
‫Ici sur le côté gauche, nous avons maintenant nos deux demandes.
‫Spécifions maintenant notre corps ici, donc les données que
‫nous voulons essentiellement envoyer au serveur.
‫Nous arrivons ici à Body, et il existe différentes manières de
‫le faire maintenant, mais la plus simple
‫consiste simplement à dire Raw, puis Application JSON.
‫Tout ce que nous avons à faire ici est de spécifier essentiellement
‫du JSON, qui sera ensuite transmis au serveur.
‫Donc, la première chose que nous voulons spécifier
‫est le nom du
‫Tour, et vous vous souvenez qu'en JSON, tout doit être entre
‫guillemets et en fait des guillemets doubles, pas n'importe quels guillemets.
‫Permettez-moi d'appeler celui-ci une tournée d'essai,
‫et jetons un coup d'œil à ce que nous avons d'autre dans les données de la tournée.
‫Nous avons donc le nom, nous avons la durée,
‫et mettons aussi la difficulté.
‫Je ne vais donc pas tout préciser car cela
‫prend beaucoup trop de temps.
‫Disons simplement que la durée
‫est de 10 jours et que la difficulté
‫est facile.
‫Que comme notre corps sera transmis au serveur.
‫C'est donc testé maintenant, en appuyant sur envoyer et nous obtenons ici
‫notre réponse, ce qui est fait, rappelez-vous.
‫Voici la réponse que nous avons envoyée, c'est fait.
‫Et vous voyez qu'ici dans notre console, nous
‫avons maintenant un objet qui est essentiellement
‫le JSON que nous avons envoyé dans notre corps, n'est-ce pas ?
‫Tellement parfait, ça marche !
‫Ce n'est plus JSON, comme vous pouvez le voir.
‫C'est vraiment un objet JavaScript.
‫Juste pour vous montrer que
‫nous avions vraiment besoin d'un middleware, commentons celui-ci.
‫Envoyer à nouveau.
‫Maintenant n'ont plus la demande. corps, non?
‫C'est pourquoi il n'est plus défini maintenant, car il n'existe plus.
‫Sauvegardez-le, renvoyez notre demande,
‫et voilà, c'est de retour.
‫Nous avons configuré notre
‫route de publication, elle fonctionne maintenant et nous avons également accès au
‫corps, et ce que nous voulons faire maintenant,
‫c'est conserver ces données dans ce fichier JSON simple de visite.
‫Nous allons en fait modifier ce fichier, afin que les données
‫soient enregistrées dans notre base de données fictive ici.
‫Ce fichier JSON fonctionne actuellement comme notre
‫base de données fictive.
‫Alors maintenant, occupons-nous-en.
‫Je vais aller de l'avant et commenter celui-ci.
‫Alors, commençons.
‫La première chose que
‫nous devons faire est de déterminer l'ID du nouvel objet.
‫Rappelez-vous, encore une fois dans la
‫conférence sur les API REST, c'est que lorsque nous créons un nouvel objet,
‫nous ne spécifions jamais l'ID de l'objet.
‫La base de données s'en occupe généralement.
‫Un nouvel objet obtient généralement automatiquement son nouvel identifiant.
‫Eh bien, dans ce cas, nous n'avons aucune base de données,
‫et nous allons donc simplement prendre
‫l'identifiant du dernier objet, puis ajouter +1 à cela.
‫Faisons-le très rapidement, et ce n'est que du JavaScript
‫de base.
‫Donc nouveau, ce sont les visites, non?
‫N'oubliez pas que pour les visites, nous avons déjà
‫les données dans cette variable de visites.
‫C'est donc un tableau de
‫tous les objets de la tournée, et nous voulons donc
‫obtenir le dernier, à savoir les tournées. length - 1, puis la propriété
‫id de cela et nous ajoutons + 1.
‫C'est donc le nouvel identifiant.
‫Ensuite, nous créons une nouvelle tournée,
‫et cette tournée sera
‫essentiellement le corps que nous envoyons plus le nouvel identifiant que nous venons de créer.
‫On peut donc utiliser object. assigner, qui nous permet essentiellement
‫de créer un nouvel
‫objet en fusionnant deux objets existants.
‫Ainsi, le
‫premier objet sera id=newId,
‫puis nous voulons
‫request. corps.
‫Nous aurions également pu faire req. corps. id=newId, mais
‫je ne voulais pas muter l'objet body d'origine.
‫Je l'ai juste laissé comme ça.
‫C'est la nouvelle tournée, et maintenant ce que
‫nous voulons faire est de pousser cette tournée dans le tableau des tournées, n'est-ce pas ?
‫Donc, les tournées, c'est l'éventail des neuf tournées que
‫nous avons à ce stade.
‫Nous disons pousser et pousser la nouvelle tournée là-dedans.
‫C'est le tableau qui contient maintenant le nouveau tour, mais bien sûr,
‫nous devons maintenant le conserver dans le fichier.
‫C'est encore une fois assez facile pour vous
‫à ce stade, alors utilisez fs. écrire le fichier.
‫Alors lequel doit-on utiliser ?
‫writeFile ou writeFileSync ?
‫La réponse est très simple.
‫Nous sommes à l'intérieur d'une fonction de rappel, qui
‫va s'exécuter dans la boucle d'événement.
‫Nous ne pouvons jamais, jamais bloquer la boucle d'événements.
‫Ce que nous allons faire, c'est
‫utiliser writeFile et non Sync dans celui-ci.
‫Nous voulons passer une fonction de
‫rappel qui va être traitée en arrière-plan et
‫dès qu'elle est prête, elle va mettre
‫son événement dans l'une
‫des files d'attente de la boucle d'événement, qui sera ensuite gérée dès que la
‫boucle d'événement passe cette phase.
‫Rappelez-vous cela de la conférence Event Loop?
‫Quoi qu'il en soit, récupérons le nom
‫du fichier d'ici, car nous allons vraiment écraser ce fichier de
‫sorte que lorsque nous redémarrerons ce serveur,
‫il sera alors là.
‫Alors
‫où- juste ici.
‫C'est donc le fichier dans lequel nous voulons écrire.
‫Les données que nous voulons écrire, qui sont des tournées,
‫puis notre fonction de rappel, qui dans ce
‫cas n'a que l'erreur.
‫Ici, je viens de remarquer
‫que nous devons également stringifier cet objet, non?
‫Nous voulons json dans ce
‫fichier JSON, et il ne s'agit pour l'instant
‫que d'un simple objet JavaScript normal et nous devons donc le convertir.
‫Mais c'est encore une fois simple, déjà fait.
‫JSON. stringifier de l'objet.
‫Que voulons-nous faire dès que le fichier est écrit ?
‫Eh bien, ce que nous faisons habituellement, c'est d'envoyer l'objet nouvellement créé
‫en tant que réponse.
‫Faisons cela.
‫Donc réponse, et
‫puis comme toujours, on commence par préciser le code d'état.
‫Dans ce cas, ce ne sera pas un 200, mais un 201.
‫Donc 201 qui veut dire créé.
‫200 signifie ok, 201 signifie créé,
‫ce qui est exactement ce qui s'est passé ici.
‫Nous avons créé une nouvelle ressource sur un serveur.
‫Donc JSON, et il continue d'ajouter ce message ici.
‫Le statut est à nouveau, le succès.
‫Je n'utilise pas la propriété results ici,
‫que nous avions auparavant, car maintenant je ne renvoie qu'un seul résultat.
‫Les données sont notre enveloppe ici.
‫La tournée est une nouvelle tournée.
‫C'est ça!
‫Sauvegardez-le ici,
‫et ainsi formatez-le, ou codez un peu.
‫Ajoutons un peu plus d'espace ici.
‫Je pense que nous sommes prêts à essayer maintenant.
‫Nous pouvons en fait créer une nouvelle tournée, en utilisant ces données ici.
‫Alors ajustez ce Tour Test, et avec ces
‫données, et attendons ça.
‫Que s'est-il passé ici?
‫Voyons, ah d'accord.
‫Nous avons un problème que nous avons envoyé une réponse deux fois essentiellement.
‫Nous avons donc envoyé une réponse avec JSON,
‫puis à nouveau avec . envoyer.
‫Ce n'est pas permis.
‫C'est en fait pourquoi nous obtenons cette erreur ici.
‫C'est donc bien que cela se soit produit ici, afin que vous
‫sachiez ce que signifie cette erreur standard ici.
‫HTTP_HEADERS_SENT ne peut pas définir d'en-têtes après
‫leur envoi au client.
‫Cela se produit lorsque vous essayez d'envoyer deux réponses.
‫Nous devons nous débarrasser de cela.
‫Oui, c'était la seule erreur que nous avions.
‫Cela devrait maintenant le réparer.
‫Essaie.
‫Et en effet, nous y voilà.
‫Nous avons donc notre identifiant de
‫10, que notre code a créé pour nous, puis toute la tournée qui
‫correspond exactement aux données que nous avons envoyées en tant que corps dans notre demande.
‫Maintenant, le fait est que lorsque nous aurons toutes
‫les tournées ici, cela n'apparaîtra pas encore.
‫Si nous descendons ici, en
‫fait c'est déjà là.
‫Nous avons celui d'avant, donc quand nous avons eu cette
‫erreur, cela a également créé cette tournée ici.
‫Puis bien sûr, la tournée que nous avons créée avec l'id de 10.
‫Donc, cette tournée ici est exactement celle qui a
‫été créée en ce moment.
‫Si nous le faisons maintenant, Test Tour 2, avec une durée de seulement 5.
‫Essayons celui-ci, et si j'obtiens toutes les tournées, cela
‫apparaîtra également ici.
‫J'ai dit au début que cela ne fonctionnerait pas, donc que cela ne s'afficherait pas tout
‫de suite, car cela
‫ne fonctionne que si nous redémarrons le serveur.
‫Ce fichier, le tour-simple.
‫json d'où proviennent nos visites,
‫n'est lu qu'au début lorsque nous démarrons le serveur.
‫Maintenant, le fait est que chaque fois que nous enregistrons quelque chose dans
‫ce fichier JSON, il rechargera également le serveur.
‫Laissez-moi vous le prouver, donc si j'appuie sur Sauvegarder maintenant,
‫alors regardez ce qui se passe ici.
‫Je l'enregistre donc, et vous voyez qu'ici,
‫il a redémarré le serveur.
‫Il a également formaté le code, car plus joli.
‫Mais ce qui compte ici, c'est que ce code a été mis à jour.
‫C'est pourquoi chaque fois que nous sauvegardons quelque chose
‫ici avec notre API, il
‫rechargera immédiatement le serveur et rechargera le contenu du fichier
‫dans les visites, et nous pourrons alors le lire tout de suite.
‫C'est pourquoi nous avons
‫accès immédiatement à toutes les visites nouvellement créées.
‫Avoir du sens ?
‫Si ce n'est pas
‫le cas, n'hésitez pas à poser vos questions, et bien sûr la section Q&R, n'est-ce pas ?