Node.js - Flux

Que sont les flux?

Les flux sont des objets qui vous permettent de lire des données à partir d'une source ou d'écrire des données vers une destination de manière continue. Dans Node.js, il existe quatre types de flux -

  • Readable - Flux utilisé pour l'opération de lecture.

  • Writable - Flux utilisé pour les opérations d'écriture.

  • Duplex - Flux qui peut être utilisé pour les opérations de lecture et d'écriture.

  • Transform - Un type de flux duplex où la sortie est calculée en fonction de l'entrée.

Chaque type de Stream est un EventEmitterinstance et lance plusieurs événements à des moments différents. Par exemple, certains des événements couramment utilisés sont -

  • data - Cet événement est déclenché lorsque des données sont disponibles pour la lecture.

  • end - Cet événement est déclenché lorsqu'il n'y a plus de données à lire.

  • error - Cet événement est déclenché lorsqu'il y a une erreur de réception ou d'écriture de données.

  • finish - Cet événement est déclenché lorsque toutes les données ont été vidées vers le système sous-jacent.

Ce didacticiel fournit une compréhension de base des opérations couramment utilisées sur Streams.

Lecture à partir d'un flux

Créez un fichier texte nommé input.txt ayant le contenu suivant -

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Créez un fichier js nommé main.js avec le code suivant -

var fs = require("fs");
var data = '';

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Set the encoding to be utf8. 
readerStream.setEncoding('UTF8');

// Handle stream events --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function() {
   console.log(data);
});

readerStream.on('error', function(err) {
   console.log(err.stack);
});

console.log("Program Ended");

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Ecrire dans un flux

Créez un fichier js nommé main.js avec le code suivant -

var fs = require("fs");
var data = 'Simply Easy Learning';

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Write the data to stream with encoding to be utf8
writerStream.write(data,'UTF8');

// Mark the end of file
writerStream.end();

// Handle stream events --> finish, and error
writerStream.on('finish', function() {
   console.log("Write completed.");
});

writerStream.on('error', function(err) {
   console.log(err.stack);
});

console.log("Program Ended");

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie.

Program Ended
Write completed.

Ouvrez maintenant le fichier output.txt créé dans votre répertoire actuel; il devrait contenir ce qui suit -

Simply Easy Learning

Tuyauterie des flux

La tuyauterie est un mécanisme dans lequel nous fournissons la sortie d'un flux comme entrée d'un autre flux. Il est normalement utilisé pour obtenir des données d'un flux et pour transmettre la sortie de ce flux à un autre flux. Il n'y a aucune limite sur les opérations de tuyauterie. Nous allons maintenant montrer un exemple de canalisation pour lire un fichier et l'écrire dans un autre fichier.

Créez un fichier js nommé main.js avec le code suivant -

var fs = require("fs");

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Pipe the read and write operations
// read input.txt and write data to output.txt
readerStream.pipe(writerStream);

console.log("Program Ended");

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie.

Program Ended

Ouvrez le fichier output.txt créé dans votre répertoire actuel; il devrait contenir ce qui suit -

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Chaînage des flux

Le chaînage est un mécanisme pour connecter la sortie d'un flux à un autre flux et créer une chaîne d'opérations de flux multiples. Il est normalement utilisé avec les opérations de tuyauterie. Nous allons maintenant utiliser le piping et le chaînage pour compresser d'abord un fichier, puis le décompresser.

Créez un fichier js nommé main.js avec le code suivant -

var fs = require("fs");
var zlib = require('zlib');

// Compress the file input.txt to input.txt.gz
fs.createReadStream('input.txt')
   .pipe(zlib.createGzip())
   .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("File Compressed.");

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie.

File Compressed.

Vous constaterez que input.txt a été compressé et qu'il a créé un fichier input.txt.gz dans le répertoire courant. Essayons maintenant de décompresser le même fichier en utilisant le code suivant -

var fs = require("fs");
var zlib = require('zlib');

// Decompress the file input.txt.gz to input.txt
fs.createReadStream('input.txt.gz')
   .pipe(zlib.createGunzip())
   .pipe(fs.createWriteStream('input.txt'));
  
console.log("File Decompressed.");

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie.

File Decompressed.