L'essentiel de Node.js

Utiliser les streams de lecture

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Parfois, vous aurez besoin d'ouvrir un tunnel pour lire un fichier de façon dynamique. Voyez comment le faire aisément avec Node.js.
05:44

Transcription

Alors, avec node.js, il est également possible de créer des stream de lecture et on verra après des streams d'écriture également. C'est quoi un stream, en fait concrètement ? C'est un espèce de tunnel, sur lequel on va se câbler et qui va lire des informations et puis qui aura la possibilité de nous donner de l'info. Déjà, on va essayer de comprendre pourquoi ça pourrait être intéressant d'avoir un stream plutôt que de faire la lecture. Il faut savoir que ça va bloquer votre processus un petit peu. Ici, on a mit un très très gros fichier, donc lambda.js dans le dossier lib, alors, c'est un fichier avec du lorem ipsum à foison, et on va faire un fs.readFile qu'on a déjà utilisé et là, on va lui donner effectivement lib et puis /lambda.js. C'est un fichier lambda hein, ça peut être tout et n'importe quoi sans aucun problème Et puis ici, on va lui mettre les erreurs comme d'habitude et puis pourquoi pas ici le log, donc en fait, concrètement, notre fichier qui est lu. On va lui demander à cet endroit-là, de nous faire un affichage du console.log et on va ici lui demander notre log.length, donc la taille de notre log, directement ici On va voir qu'effectivement entre le moment où on va lancer et puis le moment où ça va s'afficher vraiment, il ne se passe pas grand chose, c'est sûr que là, ce n'est pas un fichier qui fait 10 mégas, mais il peut y avoir un petit delta. Le delta, c'est un peu embêtant parce qu'on aimerait bien savoir où ça en est, et ça ne nous donne pas vraiment d'information, c'est-à-dire qu'on ne sait pas où ça en est. On sait juste que ça se termine à un moment, mais on ne sait pas où ça en est. Avec le stream, on a la possibilité d'avoir de l'information au fur et à mesure de la lecture jusqu'à la fin de la lecture de ce stream. Pour créer un stream, ce n'est pas très compliqué, on va utiliser la création de stream qui se trouve sur fs et on va donc directement utiliser une fonction qui va s'appeler createReadStream. Ça, ça va nous permettre de démarrer un stream et de le démarrer sur quelque chose. Alors ce quelque chose, nous on l'a déjà, c'est lib/lambda.js qu'on a là, et puis hop ici, on va lui donner un encode, donc l'encode, vous l'aviez déjà vu, c'est toujours la même chose, on va lui donner UTF-8, alors attention, c'est virgule ici, et on va lui mettre un UTF-8 à cet endroit-là. Donc quand vous allez avoir ça, il va falloir le mettre dans une variable. On va l'appeler stream, et comme vous pouvez le remarquer, un stream c'est un stream, donc, ce n'est pas synchrone. On va ensuite ici avoir des possibilités et des événements. On peut utiliser le once qui permet de dire : avant que tu ne reçoives des données, tu va afficher quelque chose. Hop, fonction anonyme, et puis là, on va lui mettre à cet endroit-là le start. Donc le start, c'est ce qu'on avait en dessous, on va le mettre là. Et puis ensuite, on va lui dire aussi : quand tu reçois des datas, donc, ça va donner stream.on et data, et évidemment fonction anonyme. Alors la fonction anonyme ici, elle prend des chunks. Qu'est-ce que ça veut dire des chunks ? C'est des petits bouts, des parties en fait de notre fichier qui sont lus par le stream parce que le stream va lire au fur et à mesure jusqu'à la fin. Il va falloir qu'on les affiche, ce serait sympa quand même de pouvoir voir ce qui se passe. Donc on va utiliser process, que maintenant on connait bien, avec stdout, et puis à l'intérieur, on va lui mettre ici le chunk.length pour savoir de combien sont les chunks. Donc là, on va utiliser chunk à cet endroit-là, attention c'est juste un cas, et on va faire un « : », et là, on va venir afficher le chunk qu'on a juste au dessus .length Donc vous allez voir qu'il va nous faire ça par petits paquets, tout simplement. Alors, c'est très intéressant, dans le cas où on a des très très gros fichiers et qu'on veut savoir exactement ce qui va se passer. Là, ça va nous permettre d'avoir de l'information en plus. Alors on a un dernier qui permet de savoir quand ça se termine, un dernier on qui est end sur lequel effectivement on peut venir également câbler de la logique et on va pouvoir lui dire qu'à la fin, quand il a terminé réellement, eh bien, il vient nous mettre un petit console.log comme d'habitude, avec ici, END. Comme ça, on aura de l'information. Alors, on va enlever cette partie-là, et puis on va maintenant lancer le serveur. Effectivement là, on a un petit problème parce qu'il nous dit qu'il ne reconnait pas process.stdout et effectivement, c'est ma faute, il faut mettre un write derrière, sinon ça ne peut pas fonctionner. Alors, vous remarquez qu'ici effectivement on voit qu'il a découpé le fichier en pleins de petits bouts et il va nous afficher directement les différentes chunks jusqu'à la fin. Vous remarquez que c'est assez intéressant parce que c'est lu par paquet et du coup, ici, ça découpe de processus de lecture en plusieurs phases qui nous permettent d'avoir une information sur la fin de ce chunk. Alors, on pourrait tout à fait récupérer ici les différents chunk.length et les comparer avec la taille complète du fichier, ce qui nous permettrait d'avoir un pourcentage effectué et on pourrait se mettre ça quelque part pour à chaque fois aller jusqu'au bout du processus et afficher le pourcentage de lecture jusqu'à la lecture finale. Pour les très très très gros fichiers, ça, c'est la meilleure façon de faire, gardez bien ça de côté : la lecture en stream est quelque chose de très intéressante et le caractère asynchrome de node.js lui permet de mettre en place des streams de lecture d'une façon extrêmement simple. Vous voyez que là en quelques lignes, on a déjà quelque chose de fonctionnel et qui nous permet de lire un fichier sous forme de stream, et d'avoir de l'information sur ce qui se passe réellement dans node.js et dans le serveur, au moment où il fait la lecture du fichier.

L'essentiel de Node.js

Exploitez les possibilités de Node.js et créez des applications côté serveur entièrement en JavaScript. Travaillez avec des requêtes web, gérez le protocole WebSocket, etc.

4h00 (44 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Node.js Node.js 7.0
Spécial abonnés
Date de parution :26 déc. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !