Tutoriel Node js Streams : Filestream, Pipes
Flux de fichiers dans Node.js
Node utilise largement les flux comme mรฉcanisme de transfert de donnรฉes.
Par exemple, lorsque vous envoyez quelque chose ร la console ร l'aide de la fonction console.log, vous utilisez en fait un flux pour envoyer les donnรฉes ร la console.
Node.js a รฉgalement la capacitรฉ de diffuser les donnรฉes des fichiers afin qu'elles puissent รชtre lues et รฉcrites de maniรจre appropriรฉe. Nous allons maintenant examiner un exemple de la faรงon dont nous pouvons utiliser des flux pour lire et รฉcrire ร partir de fichiers. Nous devons suivre les รฉtapes mentionnรฉes ci-dessous pour cet exemple
รtape 1) Crรฉez un fichier appelรฉ data.txt contenant les donnรฉes ci-dessous. Supposons que ce fichier soit stockรฉ sur le lecteur D de notre machine locale.
Tutoriel sur Node.js
Introduction
รvรฉnements
Connectivitรฉ des donnรฉes
Utiliser le jasmin
รtape 2) รcrivez le code pertinent qui utilisera les flux pour lire les donnรฉes du fichier.
var fs = require("fs");
var stream;
stream = fs.createReadStream("D://data.txt");
stream.on("data", function(data) {
var chunk = data.toString();
console.log(chunk);
});
Code Explication:-
- Nous devons d'abord inclure les modules 'fs' qui contiennent toutes les fonctionnalitรฉs requises pour crรฉer des flux.
- Ensuite, nous crรฉons un flux lisible en utilisant la mรฉthode โ createReadStream. En entrรฉe, nous donnons l'emplacement de notre fichier data.txt.
- La fonction steam.on est un gestionnaire d'รฉvรฉnements dans lequel nous spรฉcifions le premier paramรจtre comme ยซ donnรฉes ยป. Cela signifie que chaque fois que des donnรฉes arrivent dans le flux ร partir du fichier, exรฉcutez une fonction de rappel. Dans notre cas, nous dรฉfinissons une fonction de rappel qui va effectuer 2 รฉtapes fondamentales. La premiรจre consiste ร convertir les donnรฉes lues dans le fichier en chaรฎne. La seconde serait d'envoyer la chaรฎne convertie en sortie ร la console.
- Nous prenons chaque morceau de donnรฉes lu ร partir du flux de donnรฉes et le convertissons en chaรฎne.
- Enfin, nous envoyons la sortie de chaque morceau converti de chaรฎne ร la console.
Sortie :
- Si le code est exรฉcutรฉ correctement, vous verrez la sortie ci-dessus dans la console. Cette sortie sera la mรชme que celle du fichier data.txt.
Ecrire dans un fichier
De la mรชme maniรจre que nous crรฉons un flux de lecture, nous pouvons รฉgalement crรฉer un flux d'รฉcriture pour รฉcrire des donnรฉes dans un fichier. Crรฉons d'abord un fichier vide sans contenu appelรฉ data.txt. Supposons que ce fichier soit placรฉ dans le lecteur D de notre ordinateur.
Le code ci-dessous montre comment nous pouvons รฉcrire des donnรฉes dans le fichier.
var fs = require("fs");
var stream;
stream = fs.createWriteStream("D://data.txt");
stream.write("Tutorial on Node.js")
stream.write("Introduction")
stream.write("Events")
stream.write("Generators")
stream.write("Data Connectivity")
stream.write("Using Jasmine")
Code Explication:-
- Nous crรฉons un flux inscriptible en utilisant la mรฉthode โ createWriteStream. En entrรฉe, nous donnons l'emplacement de notre fichier data.txt.
- Ensuite, nous avons utilisรฉ la mรฉthode stream.write pour รฉcrire les diffรฉrentes lignes de texte dans notre fichier texte. Le flux se chargera d'รฉcrire ces donnรฉes dans le fichier data.txt.
Si vous ouvrez le fichier data.txt, vous verrez maintenant les donnรฉes suivantes dans le fichier
Tutoriel sur Node.js
Introduction
รvรฉnements
Generators
Connectivitรฉ des donnรฉes
L'utilisation de Jasmin
Tuyaux dans Node.js
Dans les applications Node, les flux peuvent รชtre regroupรฉs ร l'aide de la mรฉthode pipe(), qui prend deux arguments :
- Un flux inscriptible requis qui fait office de destination pour les donnรฉes et
- Un objet facultatif utilisรฉ pour transmettre des options.
Un exemple typique d'utilisation de tubes, si vous souhaitez transfรฉrer des donnรฉes d'un fichier ร un autre.
Voyons donc un exemple de la faรงon dont nous pouvons transfรฉrer des donnรฉes d'un fichier ร un autre ร l'aide de canaux.
รtape 1) Crรฉez un fichier appelรฉ datainput.txt contenant les donnรฉes ci-dessous. Supposons que ce fichier soit stockรฉ sur le lecteur D de notre machine locale.
Tutoriel sur Node.js
Introduction
รvรฉnements
Generators
Connectivitรฉ des donnรฉes
Utiliser le jasmin
รtape 2) Crรฉez un fichier vide vide appelรฉ dataOutput.txt et placez-le sur le lecteur D de votre ordinateur local.
รtape 3) รcrivez le code ci-dessous pour effectuer le transfert des donnรฉes du fichier datainput.txt vers le fichier dataOutput.txt.
var fs = require("fs");
var readStream = fs.createReadStream("D://datainput.txt");
var writeStream = fs.createWriteStream("D://dataOutput.txt");
readStream.pipe(writeStream);
Code Explication:-
- Nous crรฉons d'abord un ยซ readstream ยป vers notre fichier datainput.txt qui contient toutes nos donnรฉes qui doivent รชtre transfรฉrรฉes vers le nouveau fichier.
- Nous devons ensuite crรฉer un ยซ writestream ยป dans notre fichier dataOutput.txt, qui est notre fichier vide et est la destination du transfert de donnรฉes du fichier datainput.txt.
- Nous utilisons ensuite la commande pipe pour transfรฉrer les donnรฉes du flux de lecture vers le flux d'รฉcriture. La commande pipe prendra toutes les donnรฉes qui entrent dans le flux de lecture et les transmettra au flux d'รฉcriture.
Si vous ouvrez maintenant le fichier dataOutput.txt, vous verrez toutes les donnรฉes qui รฉtaient prรฉsentes dans le fichier datainput.txt.
รvรฉnements dans Node.js
Les รฉvรฉnements sont l'un des concepts clรฉs de Node.js et parfois Node.js est appelรฉ un framework pilotรฉ par les รฉvรฉnements.
Fondamentalement, un รฉvรฉnement est quelque chose qui se produit. Par exemple, si une connexion est รฉtablie ร une base de donnรฉes, l'รฉvรฉnement de connexion ร la base de donnรฉes est dรฉclenchรฉ. La programmation รฉvรฉnementielle consiste ร crรฉer des fonctions qui seront dรฉclenchรฉes lorsque des รฉvรฉnements spรฉcifiques sont dรฉclenchรฉs.
Examinons un exemple de base de dรฉfinition d'un รฉvรฉnement dans Node.js.
Nous allons crรฉer un รฉvรฉnement appelรฉ 'data_received'. Lorsque cet รฉvรฉnement est dรฉclenchรฉ, le texte ยซ donnรฉes reรงues ยป sera envoyรฉ ร la console.
var events = require('events');
var eventEmitter = new events.EventEmitter();
eventEmitter.on('data_received', function() {
console.log('data received succesfully.');
});
eventEmitter.emit('data_received');
Code Explication:-
- Utilisez la fonction require pour inclure le module ยซ รฉvรฉnements ยป. Avec ce module, vous pourrez crรฉer des รฉvรฉnements dans Node.js.
- Crรฉez un nouvel รฉmetteur d'รฉvรฉnements. Ceci est utilisรฉ pour lier l'รฉvรฉnement, qui dans notre cas est ยซ data_received ยป ร une fonction de rappel dรฉfinie ร l'รฉtape 3.
- Nous dรฉfinissons une fonction basรฉe sur les รฉvรฉnements qui dit que si l'รฉvรฉnement ยซ data_received ยป est dรฉclenchรฉ, nous devons afficher le texte ยซ data_received ยป sur la console.
- Enfin, nous disposons d'un dรฉclenchement manuel de notre รฉvรฉnement ร l'aide de la fonction eventEmiter.emit. Cela dรฉclenchera l'รฉvรฉnement data_received.
Lorsque le programme est exรฉcutรฉ, le texte ยซ donnรฉes reรงues ยป sera envoyรฉ ร la console comme indiquรฉ ci-dessous.
รmission d'รฉvรฉnements
Lors de la dรฉfinition d'รฉvรฉnements, diffรฉrentes mรฉthodes peuvent รชtre invoquรฉes pour les รฉvรฉnements. Ce sujet se concentre sur lโexamen de chacun dโeux en dรฉtail.
- Gestionnaires d'รฉvรฉnements ponctuels
Parfois, vous souhaiterez peut-รชtre rรฉagir ร un รฉvรฉnement seulement la premiรจre fois quโil se produit. Dans ces situations, vous pouvez utiliser la mรฉthode once().
Voyons comment nous pouvons utiliser la mรฉthode once pour les gestionnaires d'รฉvรฉnements.
Code Explication:-
- Ici, nous utilisons la mรฉthode ยซ once ยป pour dire que pour l'รฉvรฉnement ยซ data_received ยป, la fonction de rappel ne doit รชtre exรฉcutรฉe qu'une seule fois.
- Ici, nous dรฉclenchons manuellement l'รฉvรฉnement 'data_received'.
- Lorsque l'รฉvรฉnement 'data_received' est ร nouveau dรฉclenchรฉ, cette fois, rien ne se passera. Cela est dรป ร la premiรจre รฉtape oรน nous avons dit que l'รฉvรฉnement ne pouvait รชtre dรฉclenchรฉ qu'une seule fois.
Si le code est exรฉcutรฉ correctement, la sortie dans le journal sera ยซ data_received with success ยป. Ce message n'apparaรฎtra qu'une seule fois dans la console.
- Inspection des รฉcouteurs d'รฉvรฉnements
ร tout moment de sa durรฉe de vie, un รฉmetteur dโรฉvรฉnements peut รชtre associรฉ ร zรฉro ou plusieurs รฉcouteurs. Les รฉcouteurs de chaque type d'รฉvรฉnement peuvent รชtre inspectรฉs de plusieurs maniรจres.
Si vous souhaitez uniquement dรฉterminer le nombre dโรฉcouteurs attachรฉs, ne cherchez pas plus loin que la mรฉthode EventEmitter.listenerCount().
(ร noter: Les auditeurs sont importants car le programme principal doit savoir si des auditeurs sont ajoutรฉs ร la volรฉe ร un รฉvรฉnement, sinon le programme fonctionnera mal car des auditeurs supplรฉmentaires seront appelรฉs.)
Code Explication:-
- Nous dรฉfinissons un type eventEmitter qui est requis pour utiliser les mรฉthodes liรฉes aux รฉvรฉnements.
- Nous dรฉfinissons ensuite un objet appelรฉ รฉmetteur qui sera utilisรฉ pour dรฉfinir nos gestionnaires d'รฉvรฉnements.
- Nous crรฉons 2 gestionnaires d'รฉvรฉnements qui ne font pratiquement rien. Ceci reste simple pour notre exemple juste pour montrer comment fonctionne la mรฉthode listeningCount.
- Dรฉsormais, lorsque vous invoquez la mรฉthode ListenerCount sur notre รฉvรฉnement data_received, elle enverra le nombre d'รฉcouteurs d'รฉvรฉnements attachรฉs ร cet รฉvรฉnement dans le journal de la console.
Si le code est exรฉcutรฉ correctement, la valeur 2 sera affichรฉe dans le journal de la console.
- L'รฉvรฉnement newListener
Chaque fois qu'un nouveau gestionnaire d'รฉvรฉnements est enregistrรฉ, l'รฉmetteur d'รฉvรฉnements รฉmet un รฉvรฉnement newListener. Cet รฉvรฉnement est utilisรฉ pour dรฉtecter de nouveaux gestionnaires d'รฉvรฉnements. Vous utilisez gรฉnรฉralement l'รฉvรฉnement newListener lorsque vous devez allouer des ressources ou effectuer une action pour chaque nouveau gestionnaire d'รฉvรฉnements.
var events = require('events');
var eventEmitter = events.EventEmitter;
var emitter = new eventEmitter();
emitter.on("newListener", function(eventName, listener) {
console.log("Added listener for " + eventName + " events");
});
emitter.on('data_received', function() {});
emitter.on('data_received', function() {});
Code Explication:-
- Nous crรฉons un nouveau gestionnaire d'รฉvรฉnements pour l'รฉvรฉnement 'newListener'. Ainsi, chaque fois qu'un nouveau gestionnaire d'รฉvรฉnements est enregistrรฉ, le texte ยซ รcouteur ajoutรฉ pour ยป + le nom de l'รฉvรฉnement sera affichรฉ dans la console.
- Ici, nous รฉcrivons sur la console le texte ยซ รcouteur ajoutรฉ pour ยป + le nom de l'รฉvรฉnement pour chaque รฉvรฉnement enregistrรฉ.
- Nous dรฉfinissons 2 gestionnaires d'รฉvรฉnements pour notre รฉvรฉnement 'data_received'.
Si le code ci-dessus est exรฉcutรฉ correctement, le texte ci-dessous sera affichรฉ dans la console. Cela montre simplement que le gestionnaire d'รฉvรฉnements 'newListener' a รฉtรฉ dรฉclenchรฉ deux fois.
Ajout d'un รฉcouteur pour les รฉvรฉnements data_received
Ajout d'un รฉcouteur pour les รฉvรฉnements data_received
Rรฉsumรฉ
- Les flux sont utilisรฉs dans Node.js pour lire et รฉcrire des donnรฉes ร partir de pรฉriphรฉriques d'entrรฉe-sortie. Node.js utilise la bibliothรจque 'fs' pour crรฉer des flux lisibles et inscriptibles vers des fichiers. Ces flux peuvent รชtre utilisรฉs pour lire et รฉcrire des donnรฉes ร partir de fichiers.
- Les tuyaux peuvent รชtre utilisรฉs pour connecter plusieurs flux ensemble. Lโun des exemples les plus courants consiste ร regrouper les flux de lecture et dโรฉcriture pour le transfert de donnรฉes dโun fichier ร lโautre.
- Node.js est souvent รฉgalement รฉtiquetรฉ comme un framework pilotรฉ par les รฉvรฉnements, et il est trรจs facile de dรฉfinir des รฉvรฉnements dans Node.js. Des fonctions peuvent รชtre dรฉfinies pour rรฉpondre ร ces รฉvรฉnements.
- Les รฉvรฉnements exposent รฉgalement des mรฉthodes permettant de rรฉpondre aux รฉvรฉnements clรฉs. Par exemple, nous avons vu le gestionnaire d'รฉvรฉnements once() qui peut รชtre utilisรฉ pour garantir qu'une fonction de rappel n'est exรฉcutรฉe qu'une seule fois lorsqu'un รฉvรฉnement est dรฉclenchรฉ.









