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
Conectivitate de date
Folosind Jasmine
Pas 2) Scrieศi codul relevant care va folosi fluxurile pentru a citi datele din fiศier.
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: -
- Mai รฎntรขi trebuie sฤ includem modulele โfsโ care conศin toate funcศionalitฤศile necesare pentru a crea fluxuri.
- Apoi, creฤm un flux care poate fi citit folosind metoda โ createReadStream. Ca intrare, oferim locaศia fiศierului nostru data.txt.
- 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ฤ.
- Luฤm fiecare bucatฤ de date care este cititฤ din fluxul de date ศi o convertim รฎntr-un ศir.
- รn cele din urmฤ, trimitem ieศirea fiecฤrui ศir convertit รฎn consolฤ.
ieศire:
- 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.
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: -
- Creฤm un flux care poate fi scris folosind metoda โ createWriteStream. Ca intrare, oferim locaศia fiศierului nostru data.txt.
- 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.
var fs = require("fs");
var readStream = fs.createReadStream("D://datainput.txt");
var writeStream = fs.createWriteStream("D://dataOutput.txt");
readStream.pipe(writeStream);
Explicaศia codului: -
- 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.
- 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.
- 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ฤ.
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: -
- Utilizaศi funcศia require pentru a include modulul โevenimenteโ. Cu acest modul, veศi putea crea evenimente รฎn Node.js.
- 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.
- 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ฤ.
- ร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.
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.
- 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.
Explicaศia codului: -
- 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ฤ.
- Aici declanศฤm manual evenimentul โdata_receivedโ.
- 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ฤ.
- 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.)
Explicaศia codului: -
- Definim un tip eventEmitter care este necesar pentru utilizarea metodelor legate de evenimente.
- Apoi definim un obiect numit emiศฤtor care va fi folosit pentru a defini gestionatorii noศtri de evenimente.
- 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.
- 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.
- 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.
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: -
- 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ฤ.
- Aici scriem pe consolฤ textul โAdฤugat ascultฤtor pentruโ + numele evenimentului pentru fiecare eveniment รฎnregistrat.
- 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.









