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.

Rezumaศ›i aceastฤƒ postare cu: