Tutorial Node js Streams: Filestream, Pipes

Flux de fișiere în Node.js

Node folosește pe scară largă fluxurile ca mecanism de transfer de date.

De exemplu, când scoateți ceva în consolă folosind funcția console.log, de fapt utilizați un flux pentru a trimite datele către consolă.

Node.js are, de asemenea, capacitatea de a transmite date din fișiere, astfel încât acestea să poată fi citite și scrise corespunzător. Vom privi acum un exemplu despre cum putem folosi fluxuri pentru a citi și scrie din fișiere. Trebuie să urmăm pașii menționați mai jos pentru acest exemplu

Pas 1) Creați un fișier numit data.txt care conține datele de mai jos. Să presupunem că acest fișier este stocat pe unitatea D a mașinii noastre locale.

Tutorial pe Node.js

Introducere

Evenimente

Generators

Conectivitate de date

Folosind Jasmine

Pas 2) Scrieți codul relevant care va folosi fluxurile pentru a citi datele din fișier.

Flux de fișiere în 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);
}); 

Explicația codului: -

  1. Mai întâi trebuie să includem modulele „fs” care conțin toate funcționalitățile necesare pentru a crea fluxuri.
  2. Apoi, creăm un flux care poate fi citit folosind metoda – createReadStream. Ca intrare, oferim locația fișierului nostru data.txt.
  3. Funcția steam.on este un handler de evenimente și în ea, specificăm primul parametru ca „date”. Aceasta înseamnă că ori de câte ori vin date în flux din fișier, apoi executați o funcție de apel invers. În cazul nostru, definim o funcție de apel invers care va efectua 2 pași de bază. Primul este de a converti datele citite din fișier ca șir. Al doilea ar fi să trimiteți șirul convertit ca ieșire către consolă.
  4. Luăm fiecare bucată de date care este citită din fluxul de date și o convertim într-un șir.
  5. În cele din urmă, trimitem ieșirea fiecărui șir convertit în consolă.

ieșire:

Flux de fișiere în Node.js

  • Dacă codul este executat corect, veți vedea rezultatul de mai sus în consolă. Această ieșire va fi aceeași cu cea din fișierul data.txt.

Scrierea într-un fișier

În același mod, în care creăm un flux de citire, putem crea și un flux de scriere pentru a scrie date într-un fișier. Să creăm mai întâi un fișier gol fără conținut numit data.txt. Să presupunem că acest fișier este plasat în unitatea D a computerului nostru.

Codul de mai jos arată cum putem scrie date în fișier.

Flux de fișiere în 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") 

Explicația codului: -

  1. Creăm un flux care poate fi scris folosind metoda – createWriteStream. Ca intrare, oferim locația fișierului nostru data.txt.
  2. Apoi am folosit metoda stream.write pentru a scrie diferitele linii de text în fișierul nostru text. Fluxul se va ocupa de scrierea acestor date în fișierul data.txt.

Dacă deschideți fișierul data.txt, acum veți vedea următoarele date în fișier

Tutorial pe Node.js

Introducere

Evenimente

Generators

Conectivitate de date

Utilizarea Iasomie

Conducte în Node.js

În aplicațiile Node, fluxurile pot fi conectate împreună folosind metoda pipe(), care are două argumente:

  • Un flux de scris necesar care acționează ca destinație pentru date și
  • Un obiect opțional folosit pentru a transmite opțiuni.

Un exemplu tipic de utilizare a conductelor, dacă doriți să transferați date dintr-un fișier în altul.

Deci, să vedem un exemplu despre cum putem transfera date dintr-un fișier în altul folosind conducte.

Pas 1) Creați un fișier numit datainput.txt care conține datele de mai jos. Să presupunem că acest fișier este stocat pe unitatea D a mașinii noastre locale.

Tutorial pe Node.js

Introducere

Evenimente

Generators

Conectivitate de date

Folosind Jasmine

Pas 2) Creați un fișier gol gol numit dataOutput.txt și plasați-l pe unitatea D a mașinii dvs. locale.

Pas 3) Scrieți codul de mai jos pentru a efectua transferul de date din fișierul datainput.txt în fișierul dataOutput.txt.

Conducte în Node.js

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

Explicația codului: -

  1. Mai întâi creăm un „readstream” în fișierul nostru datainput.txt care conține toate datele noastre care trebuie transferate în noul fișier.
  2. Apoi trebuie să creăm un „writestream” în fișierul nostru dataOutput.txt, care este fișierul nostru gol și este destinația pentru transferul de date din fișierul datainput.txt.
  3. Apoi folosim comanda pipe pentru a transfera datele din fluxul de citire în fluxul de scriere. Comanda pipe va prelua toate datele care intră în fluxul de citire și le va împinge în fluxul de scriere.

Dacă deschideți acum fișierul dataOutput.txt, veți vedea toate datele care au fost prezente în fișierul datainput.txt.

Evenimente în Node.js

Evenimentele sunt unul dintre conceptele cheie din Node.js și, uneori, Node.js este denumit cadru bazat pe evenimente.

Practic, un eveniment este ceva care se întâmplă. De exemplu, dacă se stabilește o conexiune la o bază de date, atunci evenimentul de conectare la baza de date este declanșat. Programarea bazată pe evenimente este de a crea funcții care vor fi declanșate atunci când sunt declanșate anumite evenimente.

Să ne uităm la un exemplu de bază de definire a unui eveniment în Node.js.

Vom crea un eveniment numit „data_received”. Când acest eveniment este declanșat, textul „date primite” va fi trimis către consolă.

Evenimente în 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'); 

Explicația codului: -

  1. Utilizați funcția require pentru a include modulul „evenimente”. Cu acest modul, veți putea crea evenimente în Node.js.
  2. Creați un nou emițător de evenimente. Acesta este folosit pentru a lega evenimentul, care în cazul nostru este „data_received” la o funcție de apel invers care este definită în pasul 3.
  3. Definim o funcție bazată pe evenimente care spune că, în cazul în care evenimentul „data_received” este declanșat, atunci ar trebui să scoatem textul „data_received” în consolă.
  4. În cele din urmă, avem un declanșator manual al evenimentului nostru folosind funcția eventEmiter.emit. Aceasta va declanșa evenimentul data_received.

Când programul este rulat, textul „date primite” va fi trimis la consolă, așa cum se arată mai jos.

Evenimente în Node.js

Emiterea de evenimente

La definirea evenimentelor, există diferite metode pentru evenimente care pot fi invocate. Acest subiect se concentrează pe analizarea fiecăruia dintre ele în detaliu.

  1. Gestionare de evenimente unice

Uneori s-ar putea să fii interesat să reacționezi la un eveniment doar prima dată când are loc. În aceste situații, puteți utiliza metoda once().

Să vedem cum putem folosi metoda once pentru handlerii de evenimente.

Emiterea de evenimente

Explicația codului: -

  1. Aici folosim metoda „o dată” pentru a spune că pentru evenimentul „data_received”, funcția de apel invers ar trebui să fie executată o singură dată.
  2. Aici declanșăm manual evenimentul „data_received”.
  3. Când evenimentul „data_received” este declanșat din nou, de data aceasta, nu se va întâmpla nimic. Acest lucru se datorează primului pas în care am spus că evenimentul ar putea fi declanșat o singură dată.

Dacă codul este executat corect, rezultatul din jurnal va fi „data_received cu succes”. Acest mesaj va apărea o singură dată în consolă.

  1. Inspectarea ascultătorilor de evenimente

În orice moment al vieții sale, un emițător de evenimente poate avea zero sau mai mulți ascultători atașați la el. Ascultătorii pentru fiecare tip de eveniment pot fi inspectați în mai multe moduri.

Dacă sunteți interesat să determinați doar numărul de ascultători atașați, atunci nu căutați mai departe decât metoda EventEmitter.listenerCount().

(Notă: Ascultătorii sunt importanți deoarece programul principal ar trebui să știe dacă ascultătorii sunt adăugați din mers la un eveniment, altfel programul va funcționa defectuos deoarece vor fi chemați ascultători suplimentari.)

Emiterea de evenimente

Explicația codului: -

  1. Definim un tip eventEmitter care este necesar pentru utilizarea metodelor legate de evenimente.
  2. Apoi definim un obiect numit emițător care va fi folosit pentru a defini gestionatorii noștri de evenimente.
  3. Creăm 2 handlere de evenimente care practic nu fac nimic. Acest lucru este simplu pentru exemplul nostru doar pentru a arăta cum funcționează metoda listenerCount.
  4. Acum, când invocați metoda listenerCount pe evenimentul nostru data_received, acesta va trimite numărul de ascultători de evenimente atașați acestui eveniment în jurnalul consolei.

Dacă codul este executat corect, valoarea 2 va fi afișată în jurnalul consolei.

  1. Evenimentul noul Ascultător

De fiecare dată când este înregistrat un nou handler de evenimente, emițătorul de evenimente emite un eveniment newListener. Acest eveniment este folosit pentru a detecta noi handlere de evenimente. De obicei, utilizați evenimentul newListener atunci când trebuie să alocați resurse sau să efectuați o anumită acțiune pentru fiecare handler de evenimente nou.

Emiterea de evenimente

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() {}); 

Explicația codului: -

  1. Creăm un nou handler de evenimente pentru evenimentul „newListener”. Deci, ori de câte ori este înregistrat un nou gestionar de evenimente, textul „Adăugat ascultator pentru” + numele evenimentului va fi afișat în consolă.
  2. Aici scriem pe consolă textul „Adăugat ascultător pentru” + numele evenimentului pentru fiecare eveniment înregistrat.
  3. Definim 2 handlere de evenimente pentru evenimentul nostru „data_received”.

Dacă codul de mai sus este executat corect, textul de mai jos va fi afișat în consolă. Arată doar că handlerul de evenimente „newListener” a fost declanșat de două ori.

Ascultător adăugat pentru evenimente data_received

Ascultător adăugat pentru evenimente data_received

Rezumat

  • Fluxurile sunt folosite în Node.js pentru a citi și scrie date de pe dispozitivele de intrare-ieșire. Node.js folosește biblioteca „fs” pentru a crea fluxuri care pot fi citite și inscriptibile în fișiere. Aceste fluxuri pot fi folosite pentru a citi și scrie date din fișiere.
  • Conductele pot fi folosite pentru a conecta mai multe fluxuri împreună. Unul dintre cele mai obișnuite exemple este de a canaliza fluxul de citire și scriere împreună pentru transferul de date dintr-un fișier în altul.
  • Node.js este adesea etichetat ca un cadru bazat pe evenimente și este foarte ușor să definiți evenimente în Node.js. Pot fi definite funcții care răspund la aceste evenimente.
  • Evenimentele expun, de asemenea, metode de răspuns la evenimentele cheie. De exemplu, am văzut handlerul de evenimente once() care poate fi folosit pentru a ne asigura că o funcție de apel invers este executată o singură dată când este declanșat un eveniment.