Tutorial Node js Streams: Filestream, Pipes

Cuprins:

Anonim

În acest tutorial, veți învăța

  • Filestream în Node.js
  • Țevi în Node.js
  • Evenimente în Node.js
  • Emiterea de evenimente

Filestream în Node.js

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

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

Node.js are, de asemenea, capacitatea de a transmite în flux date din fișiere, astfel încât acestea să poată fi citite și scrise în mod corespunzător. Vom analiza acum un exemplu despre modul în care putem folosi fluxurile pentru a citi și scrie din fișiere. Trebuie să urmăm pașii de mai jos pentru acest exemplu

Pasul 1) Creați un fișier numit data.txt care are 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

Generatoare

Conectivitate de date

Folosind Jasmine

Pasul 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);});

Cod Explicație: -

  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 lizibil folosind metoda - createReadStream. Ca intrare, oferim locația fișierului nostru data.txt.
  3. Funcția steam.on este un gestionar de evenimente și, în aceasta, specificăm primul parametru ca „date”. Aceasta înseamnă că ori de câte ori intră date din flux din fișier, atunci 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 un șir. Al doilea ar fi trimiterea șirului 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:

  • 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")

Cod Explicație: -

  1. Creăm un flux de scris utilizând metoda - createWriteStream. Ca intrare, oferim locația fișierului nostru data.txt.
  2. Apoi am folosit stream.write o metodă 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

Generatoare

Conectivitate de date

Folosind Jasmine

Țevi în Node.js

În cadrul aplicațiilor Node, fluxurile pot fi conectate împreună utilizând metoda pipe (), care ia două argumente:

  • Un flux scriibil obligatoriu care acționează ca destinație pentru date și
  • Un obiect opțional folosit pentru a trece în opțiuni.

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

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

Pasul 1) Creați un fișier numit datainput.txt care are 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

Generatoare

Conectivitate de date

Folosind Jasmine

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

Pasul 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);

Cod Explicație: -

  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 readstream în fluxul de scriere. Comanda pipe va prelua toate datele care intră în fluxul de readstream și le va împinge către fluxul de scris.

Dacă deschideți acum fișierul dataOutput.txt, veți vedea toate datele care erau 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ă este stabilită o conexiune la o bază de date, atunci este declanșat evenimentul de conexiune la baza de date. Programarea bazată pe evenimente este de a crea funcții care vor fi declanșate atunci când sunt declanșate evenimente specifice.

Să vedem un exemplu de bază de definire a unui eveniment în Node.js.

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

var events = require('events');var eventEmitter = new events.EventEmitter();eventEmitter.on('data_received', function() {console.log('data received succesfully.');});eventEmitter.emit('data_received');

Cod Explicație: -

  1. Utilizați funcția de solicitare 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. Aceasta este utilizată 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 "date_received" este declanșat, atunci ar trebui să trimitem 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 primit de date.

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 examinarea fiecăruia dintre ele în detaliu.

  1. Manipularea evenimentelor o singură dată

Uneori s-ar putea să fiți interesat să reacționați la un eveniment numai prima dată când apare. În aceste situații, puteți utiliza metoda once ().

Să vedem cum putem folosi metoda odată pentru gestionarele de evenimente.

Cod Explicație: -

  1. Aici folosim metoda „o dată” pentru a spune că pentru evenimentul „date_received”, funcția de apel invers trebuie 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 nu poate fi declanșat decât o singură dată.

Dacă codul este executat corect, ieșirea din jurnal va fi „date_primite 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, 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 nu va funcționa, deoarece vor fi chemați ascultători suplimentari.)

Cod Explicație: -

  1. Definim un tip EventEmitter care este necesar pentru utilizarea metodelor legate de eveniment.
  2. Apoi definim un obiect numit emițător care va fi folosit pentru a defini gestionarele noastre de evenimente.
  3. Creăm 2 gestionare 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 la 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. Noul eveniment de ascultare

De fiecare dată când este înregistrat un nou gestionar de evenimente, emițătorul de evenimente emite un nou eveniment Listener. Acest eveniment este utilizat pentru a detecta noi gestionare de evenimente. De obicei utilizați evenimentul newListener atunci când trebuie să alocați resurse sau să efectuați o acțiune pentru fiecare nou gestionar 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() {});

Cod Explicație: -

  1. Creăm un nou gestionar de evenimente pentru evenimentul „newListener”. Deci, ori de câte ori este înregistrat un nou gestionar de evenimente, textul „Ascultător adăugat pentru” + numele evenimentului va fi afișat în consolă.
  2. Aici scriem pe consolă textul „Ascultător adăugat pentru” + numele evenimentului pentru fiecare eveniment înregistrat.
  3. Definim 2 gestionare 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ă gestionarul de evenimente „newListener” a fost declanșat de două ori.

S-a adăugat un ascultător pentru evenimentele primite de date

S-a adăugat un ascultător pentru evenimentele primite de date

rezumat

  • Fluxurile sunt utilizate î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 lizibile și care pot fi scrise în fișiere. Aceste fluxuri pot fi utilizate pentru a citi și scrie date din fișiere.
  • Țevile pot fi utilizate pentru a conecta mai multe fluxuri împreună. Unul dintre cele mai frecvente exemple este de a conecta fluxul de citire și scriere împreună pentru transferul de date dintr-un fișier în celălalt.
  • Node.js este adesea etichetat și ca cadru bazat pe evenimente și este foarte ușor să definiți evenimente în Node.js. Pot fi definite funcții care răspund acestor evenimente.
  • Evenimentele expun, de asemenea, metode de răspuns la evenimente cheie. De exemplu, am văzut gestionatorul 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.