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

Code Forklaring:-

  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 lรฆsbar stream ved at bruge 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") 

Code Forklaring:-

  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 fรธlgende 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);

Code Forklaring:-

  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

Hรฆndelser er et af nรธglebegreberne 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'); 

Code Forklaring:-

  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

Code Forklaring:-

  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

Code Forklaring:-

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

Code Forklaring:-

  1. Vi er ved at oprette en ny hรฆndelseshandler til 'newListener'-begivenheden. Sรฅ hver gang en ny hรฆndelseshandler er registreret, vil teksten "Tilfรธjet lytter til" + hรฆndelsesnavnet blive vist 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 skabe lรฆsbare 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.

Opsummer dette indlรฆg med: