Node js Streams Tutorial: Filestream, Pipes

Filstream i Node.js

Node gør udstrakt brug af streams som en dataoverførselsmekanisme.

For eksempel, når du udsender noget til konsollen ved hjælp af console.log-funktionen, bruger du faktisk en stream til at sende dataene til konsollen.

Node.js har også mulighed for at streame data fra filer, så de kan læses og skrives korrekt. Vi vil nu se på et eksempel på, hvordan vi kan bruge streams til at læse og skrive fra filer. Vi skal følge nedenstående trin for dette eksempel

Trin 1) Opret en fil kaldet data.txt, som har nedenstående data. Lad os antage, at denne fil er gemt på D-drevet på vores lokale maskine.

Tutorial om Node.js

Introduktion

Events

Generators

Dataforbindelse

Bruger jasmin

Trin 2) Skriv den relevante kode, som vil gøre brug af streams til at læse data fra filen.

Filstream i 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);
}); 

Kodeforklaring:-

  1. Vi skal først inkludere 'fs'-modulerne, som indeholder al den funktionalitet, der kræves for at skabe streams.
  2. Dernæst opretter vi en readable stream ved hjælp af metoden – createReadStream. Som input angiver vi placeringen af ​​vores data.txt-fil.
  3. Steam.on-funktionen er en hændelseshandler, og i den angiver vi den første parameter som 'data'. Dette betyder, at når der kommer data i strømmen fra filen, skal du udføre en tilbagekaldsfunktion. I vores tilfælde definerer vi en tilbagekaldsfunktion, som udfører 2 grundlæggende trin. Den første er at konvertere data læst fra filen som en streng. Det andet ville være at sende den konverterede streng som output til konsollen.
  4. Vi tager hver del af data, som læses fra datastrømmen, og konverterer den til en streng.
  5. Endelig sender vi output fra hver strengkonverteret del til konsollen.

Output:

Filstream i Node.js

  • Hvis koden udføres korrekt, vil du se ovenstående output i konsollen. Dette output vil være det samme som i data.txt-filen.

Skriver til en fil

På samme måde, som vi opretter en læsestrøm, kan vi også oprette en skrivestrøm for at skrive data til en fil. Lad os først oprette en tom fil uden indhold kaldet data.txt. Lad os antage, at denne fil er placeret i D-drevet på vores computer.

Nedenstående kode viser, hvordan vi kan skrive data til filen.

Filstream i 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") 

Kodeforklaring:-

  1. Vi opretter en skrivbar stream ved at bruge metoden - createWriteStream. Som input angiver vi placeringen af ​​vores data.txt-fil.
  2. Dernæst brugte vi stream.write en metode til at skrive de forskellige tekstlinjer til vores tekstfil. Streamen sørger for at skrive disse data til data.txt-filen.

Hvis du åbner filen data.txt, vil du nu se folloenwing data i filen

Tutorial om Node.js

Introduktion

Events

Generators

Dataforbindelse

Ved brug af Jasmine

Rør i Node.js

Inden for Node-applikationer kan streams kobles sammen ved hjælp af pipe()-metoden, som tager to argumenter:

  • En påkrævet skrivbar stream, der fungerer som destination for data og
  • Et valgfrit objekt, der bruges til at sende optioner ind.

Et typisk eksempel på brug af rør, hvis du ønsker at overføre data fra den ene fil til den anden.

Så lad os se et eksempel på, hvordan vi kan overføre data fra den ene fil til den anden ved hjælp af rør.

Trin 1) Opret en fil kaldet datainput.txt, som har nedenstående data. Lad os antage, at denne fil er gemt på D-drevet på vores lokale maskine.

Tutorial om Node.js

Introduktion

Events

Generators

Dataforbindelse

Bruger jasmin

Trin 2) Opret en tom tom fil kaldet dataOutput.txt og placer den på D-drevet på din lokale maskine.

Trin 3) Skriv nedenstående kode for at udføre overførslen af ​​data fra filen datainput.txt til filen dataOutput.txt.

Rør i Node.js

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

Kodeforklaring:-

  1. Vi laver først en "readstream" til vores datainput.txt fil, som indeholder alle vores data, som skal overføres til den nye fil.
  2. Vi skal derefter oprette en "writestream" til vores dataOutput.txt-fil, som er vores tomme fil og er destinationen for overførsel af data fra datainput.txt-filen.
  3. Vi bruger derefter pipe-kommandoen til at overføre data fra læsestrømmen til skrivestrømmen. Pipe-kommandoen vil tage alle de data, der kommer ind i læsestrømmen, og skubbe den til skrivestrømmen.

Hvis du nu åbner filen dataOutput.txt, vil du se alle de data, som var til stede i filen datainput.txt.

Begivenheder i Node.js

Begivenheder er en af ​​nøglerne concepts i Node.js og nogle gange omtales Node.js som en begivenhedsdrevet ramme.

Grundlæggende er en begivenhed noget, der sker. For eksempel, hvis der oprettes en forbindelse til en database, udløses databaseforbindelseshændelsen. Hændelsesdrevet programmering er at skabe funktioner, der vil blive udløst, når specifikke hændelser udløses.

Lad os se på et grundlæggende eksempel på at definere en begivenhed i Node.js.

Vi vil oprette en begivenhed kaldet 'data_received'. Når denne hændelse udløses, vil teksten "data modtaget" blive sendt til konsollen.

Begivenheder i 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'); 

Kodeforklaring:-

  1. Brug kræve funktionen til at inkludere 'begivenheder' modulet. Med dette modul vil du være i stand til at oprette begivenheder i Node.js.
  2. Opret en ny begivenhedsudsender. Dette bruges til at binde hændelsen, som i vores tilfælde er "data_received" til en tilbagekaldsfunktion, som er defineret i step3.
  3. Vi definerer en hændelsesdrevet funktion, som siger, at hvis "data_received"-hændelsen udløses, skal vi udsende teksten "data_received" til konsollen.
  4. Endelig har vi en manuel udløsning af vores begivenhed ved hjælp af eventEmiter.emit-funktionen. Dette udløser hændelsen data_received.

Når programmet køres, vil teksten "data modtaget" blive sendt til konsollen som vist nedenfor.

Begivenheder i Node.js

Udsender begivenheder

Når begivenheder defineres, er der forskellige metoder til begivenheder, som kan påberåbes. Dette emne fokuserer på at se på hver enkelt af dem i detaljer.

  1. Engangshændelseshandlere

Nogle gange kan du være interesseret i kun at reagere på en begivenhed første gang den indtræffer. I disse situationer kan du bruge once() metoden.

Lad os se, hvordan vi kan gøre brug af once-metoden til hændelseshandlere.

Udsender begivenheder

Kodeforklaring:-

  1. Her bruger vi 'once'-metoden til at sige, at for hændelsen 'data_received' skal tilbagekaldsfunktionen kun udføres én gang.
  2. Her udløser vi manuelt hændelsen 'data_received'.
  3. Når hændelsen 'data_received' udløses igen, vil der ikke ske noget denne gang. Dette er på grund af det første trin, hvor vi sagde, at begivenheden kun kunne udløses én gang.

Hvis koden udføres korrekt, vil outputtet i loggen være 'data_received successfully'. Denne besked vises kun én gang i konsollen.

  1. Inspicering af begivenhedslyttere

På ethvert tidspunkt i sin levetid kan en begivenhedsudsender have nul eller flere lyttere knyttet til sig. Lytterne for hver begivenhedstype kan inspiceres på flere måder.

Hvis du kun er interesseret i at bestemme antallet af tilknyttede lyttere, skal du ikke lede længere end til EventEmitter.listenerCount()-metoden.

(Bemærk: Lytterne er vigtige, fordi hovedprogrammet skal vide, om lyttere bliver tilføjet til en begivenhed, ellers vil programmet ikke fungere, fordi yderligere lyttere bliver kaldt.)

Udsender begivenheder

Kodeforklaring:-

  1. Vi definerer en eventEmitter-type, som er nødvendig for at bruge de hændelsesrelaterede metoder.
  2. Vi definerer derefter et objekt kaldet emitter, som vil blive brugt til at definere vores hændelseshandlere.
  3. Vi opretter 2 hændelseshandlere, som stort set ikke gør noget. Dette er holdt simpelt for vores eksempel bare for at vise, hvordan listenerCount-metoden fungerer.
  4. Når du nu påkalder listenerCount-metoden på vores data_received-hændelse, vil den sende antallet af hændelseslyttere knyttet til denne hændelse i konsolloggen.

Hvis koden udføres korrekt, vil værdien 2 blive vist i konsolloggen.

  1. Den nyeListener Event

Hver gang en ny hændelseshandler registreres, udsender hændelsessenderen en newListener hændelse. Denne hændelse bruges til at opdage nye hændelseshandlere. Du bruger typisk newListener-hændelse, når du skal allokere ressourcer eller udføre en handling for hver ny hændelseshandler.

Udsender begivenheder

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

Kodeforklaring:-

  1. Vi er ved at oprette en ny hændelseshandler til 'newListener'-begivenheden. Så hver gang en ny hændelseshandler registreres, vises teksten "Tilføjet lytter til" + hændelsesnavnet.yed i konsollen.
  2. Her skriver vi til konsollen teksten "Tilføjet lytter til" + begivenhedsnavnet for hver registreret begivenhed.
  3. Vi definerer 2 hændelseshandlere for vores hændelse 'data_received'.

Hvis ovenstående kode udføres korrekt, vil nedenstående tekst blive vist i konsollen. Det viser bare, at 'newListener'-hændelseshandleren blev udløst to gange.

Tilføjet lytter til data_received begivenheder

Tilføjet lytter til data_received begivenheder

Resumé

  • Streams bruges i Node.js til at læse og skrive data fra Input-Output-enheder. node.js gør brug af 'fs'-biblioteket til at oprette readable og skrivbare streams til filer. Disse streams kan bruges til at læse og skrive data fra filer.
  • Rør kan bruges til at forbinde flere strømme sammen. Et af de mest almindelige eksempler er at røre læse- og skrivestrømmen sammen til overførsel af data fra den ene fil til den anden.
  • Node.js er ofte også tagget som en begivenhedsdrevet ramme, og det er meget nemt at definere begivenheder i Node.js. Der kan defineres funktioner, som reagerer på disse hændelser.
  • Begivenheder afslører også metoder til at reagere på nøglebegivenheder. For eksempel har vi set once() hændelseshandleren, som kan bruges til at sikre, at en tilbagekaldsfunktion kun udføres én gang, når en hændelse udløses.