‫Instructeur : Bon retour.
‫J'espère donc que vous appréciez cette section jusqu'à présent et que
‫vous aimez travailler avec Node. js.
‫Passons maintenant à notre projet
‫et construisons une API Web extrêmement simple.
‫Maintenant, pour commencer, qu'est-ce qu'une API ?
‫Eh bien, la réponse longue,
‫vous allez l'apprendre dans l'une des sections suivantes, mais pour l'instant, la
‫réponse courte, au moins dans ce contexte d'API Web, en
‫gros, une API est un service auquel nous pouvons demander des données, donc
‫dans ce cas, les données que l'utilisateur souhaite demander sont des
‫données sur les produits que nous proposons
‫dans cette ferme de nœuds, donc dans ce projet.
‫J'ai donc ici ce dossier dev-data, et là-dedans, j'ai un fichier JSON,
‫et JSON, au cas où vous ne le sauriez pas, est un
‫format de texte très simple qui
‫ressemble beaucoup à un objet JavaScript, donc
‫ça ressemble à ça , et nous pouvons avoir
‫des tableaux, ce que nous avons en fait,
‫nous avons donc un grand tableau, qui contient ensuite ces
‫cinq objets, et chaque objet a ensuite l'ID, le nom
‫du produit, l'image, etc.
‫Maintenant, chacun d'eux doit être une chaîne pour chacune des clés,
‫puis nous avons la valeur.
‫Donc, fondamentalement, ces données ici sont ce que notre API
‫enverra au client à la demande.
‫Nous aurons donc encore un autre itinéraire ici.
‫Donc ici, sinon si le nom du chemin est égal à /api.
‫Et pour l'instant, en tant qu'espace réservé, nous renverrons
‫simplement l'API comme celle-ci.
‫Donc, ce que nous voulons faire maintenant, c'est lire
‫les données de ce fichier ici, puis analyser JSON en JavaScript,
‫puis renvoyer ce résultat au client.
‫Donc quelque chose de très simple et alors mettons-nous au travail.
‫Donc, la première approche consiste à suivre
‫cette route, puis à lire le fichier ici en utilisant la
‫fonction de lecture de fichier, n'est-ce pas ?
‫Commençons donc par le faire.
‫Donc fs. , et c'est en fait
‫readFile, pas fileRead, donc readFile, puis le nom du fichier.
‫Maintenant, rappelez-vous comment je vous ai dit plus
‫tôt que ce n'est pas le seul moyen de localiser notre fichier
‫dans le système de fichiers.
‫Pour l'instant, utilisons-le encore, mais une fois
‫que nous l'aurons écrit ici, je vous
‫montrerai un autre moyen.
‫Donc, une note, ce point ici fait en fait référence au répertoire à partir
‫duquel nous exécutons la commande node dans le terminal.
‫Donc, encore une fois, ce
‫point ici représente maintenant ce dossier actuel ici
‫car c'est là que nous exécutons réellement la commande node, donc
‫dans ce dossier 1-node-farm, qui est de
‫toute façon notre répertoire de travail actuel dans ce cas,
‫mais nous pourrions avoir exécutez la commande
‫node ailleurs, et le point signifierait autre chose.
‫Ainsi, par exemple, nous pourrions parfaitement trouver, aller sur le bureau
‫et y exécuter le nœud, puis spécifier le
‫chemin complet à indexer. js, mais nous pourrions le faire,
‫mais dans ce cas, le point signifierait le bureau, donc si nous lancions le
‫script à partir du bureau, alors ceci
‫ici, ce point signifierait le bureau, et
‫ce n'est donc pas toujours idéal , et par conséquent,
‫il existe un meilleur moyen.
‫Donc tout Node. js, ils
‫ont accès à une variable appelée dirname, et cette
‫variable se traduit toujours dans le répertoire dans lequel
‫se trouve le script que nous exécutons actuellement.
‫Donc dans ce cas, c'est en fait au
‫même endroit parce que index. js se trouve également
‫dans ce dossier de ferme de nœuds, mais encore
‫une fois, pour les raisons que
‫j'ai mentionnées précédemment, il est souvent préférable d'utiliser la variable dirname,
‫alors faisons-le, et pour cela, nous créons
‫une chaîne de modèle, puis nous
‫utilisons la variable, c'est donc __dirname, donc qui représente le nom du répertoire.
‫Et donc généralement, nous le faisons comme ça.
‫Il y a maintenant une exception
‫à cette règle, qui est la fonction require.
‫Ainsi, lorsque nous avons besoin
‫de modules, nous pouvons en fait exiger nos propres modules,
‫et nous allons le faire un peu plus
‫tard, comme dans la prochaine, ou dans l'une des deux
‫prochaines vidéos, et là-dedans, le point signifie également le fonctionnement actuel répertoire et non
‫l'endroit à partir duquel nous exécutons le script.
‫Gardez donc à l'esprit que la fonction require est
‫une exception à cette règle, mais généralement,
‫le point est l'endroit où
‫le script s'exécute et __dirname est l'endroit où se trouve le fichier actuel.
‫Bon, maintenant, spécifions l'encodage du fichier utf-8, puis notre
‫fonction de rappel, qui est d'abord une erreur, rappelez-vous,
‫et nous avons donc maintenant accès à ces données.
‫Maintenant, les données sont en JSON, et donc en JavaScript, nous avons
‫quelque chose de intégré qui s'appelle JSON. analyser.
‫Et donc cela prendra le code
‫JSON, qui est
‫en fait une chaîne, et le transformera ensuite automatiquement en JavaScript, donc
‫un objet ou un tableau JavaScript dans ce cas.
‫Appelons celui-ci
‫productData, puis examinons-le également rapidement.
‫Donc dans la console dans ce cas.
‫Alors, redémarrez le serveur, et maintenant, n'oubliez pas d'appuyer
‫sur la route /api, et oh, que se passe-t-il ici ?
‫Oh, nous avons en fait redémarré le serveur.
‫Et maintenant, nous obtenons une
‫API de réponse, et jetons maintenant un coup
‫d'œil ici, en fait, à l'objet de données de produit.
‫C'est donc juste un bel objet, avec toutes les
‫données que nous avions dans ces données. fichier json.
‫Très bien, la prochaine étape consiste maintenant à renvoyer
‫ces données en tant que réponse.
‫Maintenant cette réponse. La méthode end
‫ici doit en fait renvoyer une chaîne et non un objet ici.
‫Et donc en fait, ce que nous voulons renvoyer,
‫ce sont les données directement, donc les données sont une chaîne que nous avons ensuite transformée
‫en objet à l'aide de JSON. parse, mais pour l'instant,
‫nous n'aurions pas besoin de le faire, mais je l'ai fait quand
‫même parce que nous en aurons besoin
‫plus tard lorsque nous commencerons à créer nos modèles HTML.
‫C'est à ce moment-là que nous aurons besoin
‫de ces données au format JavaScript.
‫Pour l'instant, nous voulons simplement renvoyer la chaîne réelle
‫que nous recevons.
‫Maintenant, avant de pouvoir faire cela, nous devons
‫en fait spécifier, nous
‫devons donc dire au navigateur que nous renvoyons JSON, donc comme avant, lorsque
‫nous définissons le type de contenu sur text/html, nous devons
‫maintenant dire à un navigateur que nous envoyons JSON.
‫Alors on dit rés. writeHead comme avant, et
‫maintenant nous utilisons le code
‫d'état 200, qui signifie OK, puis l'objet des en-têtes.
‫Dans ce cas, ce ne sera qu'un,
‫donc Content-type, et lorsque nous envoyons JSON, nous devons dire application/json.
‫Donc, pour HTML, c'est text/html,
‫pour JSON, c'est
‫application/json, et regardons maintenant cela.
‫Rechargez le serveur ici très rapidement, et
‫en effet, ici, nous avons notre API qui renvoie toutes les données
‫sur nos cinq produits.
‫Tellement génial, c'est génial, et c'est génial, mais ce n'est en
‫fait pas parfait, car ce
‫n'est pas vraiment efficace à 100%, et
‫c'est parce que chaque fois que quelqu'un atteint cette
‫route / api, le fichier devra être lu
‫puis renvoyé .
‫Au lieu de cela, ce que nous pouvons faire, c'est
‫simplement lire le fichier une fois au début, puis chaque fois
‫que quelqu'un atteint cette route, renvoyer simplement les
‫données sans avoir à les lire à chaque fois qu'un utilisateur le demande.
‫Cela a-t-il du sens?
‫Eh bien, ce que je vais faire, c'est mettre ça ici.
‫D'accord, et bien sûr, je n'ai pas besoin de tout ça,
‫donc ce n'est pas ici, et ce
‫n'est pas ici, et en
‫fait, ce sera un peu différent, et c'est
‫parce que nous allons maintenant utiliser la version synchrone, et je
‫sais ce que vous pensez, c'est que
‫la version synchrone bloque l'exécution du code, non ?
‫Et bien que cela soit vrai, dans
‫ce cas, ce n'est pas du
‫tout un problème, et c'est parce que le
‫code de niveau supérieur n'est en fait exécuté qu'une seule fois dès le début.
‫Seulement cette fonction de rappel, par exemple, ici,
‫celle de createServer, donc cette fonction ici, c'est ce qui est exécuté
‫à chaque fois qu'il y a
‫une nouvelle requête, mais pas un code qui se trouve ici.
‫Le code qui est en dehors des
‫fonctions de rappel, donc le code dit de niveau supérieur, n'est
‫exécuté qu'une fois le programme démarré, et donc dans cette situation,
‫peu importe s'il bloque l'exécution, car encore une
‫fois, cela n'arrive qu'une seule fois
‫et seulement lorsque le code démarre réellement, n'est-ce pas ?
‫Logique?
‫Et donc nous allons utiliser la version de synchronisation maintenant parce
‫qu'il est en fait plus facile de gérer ensuite ces
‫données, car cela met simplement les données dans une variable que nous ne
‫pouvons pas utiliser tout de suite.
‫Ne vous inquiétez donc pas du fait que cette fonction est bloquante car, encore
‫une fois, elle est dans le code de niveau
‫supérieur et n'est exécutée qu'une seule fois.
‫Le secret ici est simplement
‫de savoir quel code n'est exécuté qu'une seule fois
‫au début, et quel code est exécuté encore et encore,
‫et est donc problématique lors du blocage de la boucle d'événement.
‫Et bien sûr, tout
‫au long du reste de ce grand, grand cours, vous apprendrez cela.
‫Vous apprendrez donc tout sur la boucle d'événement, et quel
‫code bloque et lequel ne bloque pas, et pourquoi, et ce n'est donc
‫que la première fois que je le mentionne, mais ce
‫ne sera pas la dernière fois.
‫Vous m'entendrez répéter les mêmes choses encore et encore.
‫Donc, il suffit d'appeler ces données, et bien sûr, nous n'avons besoin
‫de rien de tout cela.
‫Déplaçons ça ici, et c'est tout.
‫Ainsi, avant que quoi que ce soit ne se produise, il lira
‫les données du fichier JSON en données.
‫Il analysera ensuite cela dans un objet.
‫Appelons-le dataObject ici, et donc ce que nous allons faire ici,
‫c'est de ne pas lire ce fichier à chaque fois
‫qu'il y a une demande, et à
‫la place, renvoyer simplement les données que nous avons maintenant dans notre code
‫de niveau supérieur.
‫Donc, ces données ici viennent maintenant d'ici parce que, bien sûr, ce code dans
‫la fonction de rappel a accès au
‫code de niveau supérieur à cause de la chaîne de portée, n'est-ce pas ?
‫Annuler, recommencer, et juste pour vous prouver que cela
‫fonctionne toujours, et c'est le cas.
‫Tellement parfait, et c'est mieux, c'est plus efficace, oh, et pourquoi
‫ai-je fermé ça ?
‫Très bien, ouvrons-le à nouveau très rapidement.
‫Alors on y va.
‫C'est donc notre API très simple, qui permet désormais à l'utilisateur de
‫demander simplement toutes les données sur notre application avec
‫un seul appel d'API, en gros.
‫Nous avons donc ajouté une autre route
‫ici, /api, puis nous lisons le
‫fichier de manière synchrone, le plaçons dans cet objet,
‫puis renvoyons simplement cet objet en réponse, mais
‫avant cela, en spécifiant que nous renvoyons application/json, donc que le navigateur sache
‫exactement à quoi s'attendre, et dans les deux prochaines vidéos,
‫nous commencerons en
‫fait à créer l'interface utilisateur, c'est donc la
‫partie la plus excitante, n'est-ce pas ?