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

Generators

Connectivitรฉ des donnรฉes

Utiliser le jasmin

ร‰tape 2) ร‰crivez le code pertinent qui utilisera les flux pour lire les donnรฉes du fichier.

Flux de fichiers dans Node.js

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:-

  1. Nous devons d'abord inclure les modules 'fs' qui contiennent toutes les fonctionnalitรฉs requises pour crรฉer des flux.
  2. 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.
  3. 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.
  4. Nous prenons chaque morceau de donnรฉes lu ร  partir du flux de donnรฉes et le convertissons en chaรฎne.
  5. Enfin, nous envoyons la sortie de chaque morceau converti de chaรฎne ร  la console.

Sortie :

Flux de fichiers dans Node.js

  • 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.

Flux de fichiers dans Node.js

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:-

  1. Nous crรฉons un flux inscriptible en utilisant la mรฉthode โ€“ createWriteStream. En entrรฉe, nous donnons l'emplacement de notre fichier data.txt.
  2. 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.

Tuyaux dans Node.js

var fs = require("fs");
var readStream = fs.createReadStream("D://datainput.txt");
var writeStream = fs.createWriteStream("D://dataOutput.txt");
readStream.pipe(writeStream);

Code Explication:-

  1. 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.
  2. 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.
  3. 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.

ร‰vรฉnements dans Node.js

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:-

  1. Utilisez la fonction require pour inclure le module ยซ รฉvรฉnements ยป. Avec ce module, vous pourrez crรฉer des รฉvรฉnements dans Node.js.
  2. 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.
  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.
  4. 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.

ร‰vรฉnements dans Node.js

ร‰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.

  1. 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.

ร‰mission d'รฉvรฉnements

Code Explication:-

  1. 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.
  2. Ici, nous dรฉclenchons manuellement l'รฉvรฉnement 'data_received'.
  3. 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.

  1. 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.)

ร‰mission d'รฉvรฉnements

Code Explication:-

  1. Nous dรฉfinissons un type eventEmitter qui est requis pour utiliser les mรฉthodes liรฉes aux รฉvรฉnements.
  2. Nous dรฉfinissons ensuite un objet appelรฉ รฉmetteur qui sera utilisรฉ pour dรฉfinir nos gestionnaires d'รฉvรฉnements.
  3. 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.
  4. 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.

  1. 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.

ร‰mission 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:-

  1. 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.
  2. Ici, nous รฉcrivons sur la console le texte ยซ ร‰couteur ajoutรฉ pour ยป + le nom de l'รฉvรฉnement pour chaque รฉvรฉnement enregistrรฉ.
  3. 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รฉ.

Rรฉsumez cet article avec :