Node js Streams Tutorial: Filestream, Pipes

Filstrøm i Node.js

Node bruker utstrakt bruk av strømmer som en dataoverføringsmekanisme.

For eksempel, når du sender ut noe til konsollen ved å bruke console.log-funksjonen, bruker du faktisk en strøm for å sende dataene til konsollen.

Node.js har også muligheten til å streame data fra filer slik at de kan leses og skrives på riktig måte. Vi skal nå se på et eksempel på hvordan vi kan bruke strømmer til å lese og skrive fra filer. Vi må følge trinnene nedenfor for dette eksemplet

Trinn 1) Lag en fil kalt data.txt som har dataene nedenfor. La oss anta at denne filen er lagret på D-stasjonen til vår lokale maskin.

Opplæring om Node.js

Introduksjon

Kommende hendelser

Generators

Datatilkobling

Bruker jasmin

Trinn 2) Skriv den relevante koden som vil bruke strømmer for å lese data fra filen.

Filstrøm 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 må først inkludere 'fs'-modulene som inneholder all funksjonaliteten som kreves for å lage strømmer.
  2. Deretter lager vi en lesbar strøm ved å bruke metoden – createReadStream. Som en input gir vi plasseringen til data.txt-filen vår.
  3. Steam.on-funksjonen er en hendelsesbehandler og i den spesifiserer vi den første parameteren som 'data'. Dette betyr at når data kommer i strømmen fra filen, så utfør en tilbakeringingsfunksjon. I vårt tilfelle definerer vi en tilbakeringingsfunksjon som vil utføre 2 grunnleggende trinn. Den første er å konvertere dataene som er lest fra filen som en streng. Den andre ville være å sende den konverterte strengen som en utgang til konsollen.
  4. Vi tar hver del av data som leses fra datastrømmen og konverterer den til en streng.
  5. Til slutt sender vi utdataene fra hver strengkonverterte del til konsollen.

Utgang:

Filstrøm i Node.js

  • Hvis koden utføres riktig, vil du se utdataene ovenfor i konsollen. Denne utgangen vil være den samme som i data.txt-filen.

Skriver til en fil

På samme måte som vi lager en lesestrøm, kan vi også lage en skrivestrøm for å skrive data til en fil. La oss først lage en tom fil uten innhold kalt data.txt. La oss anta at denne filen er plassert i D-stasjonen på datamaskinen vår.

Koden nedenfor viser hvordan vi kan skrive data til filen.

Filstrøm 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 lager en skrivbar strøm ved å bruke metoden – createWriteStream. Som en input gir vi plasseringen til data.txt-filen vår.
  2. Deretter brukte vi stream.write en metode for å skrive de forskjellige tekstlinjene til tekstfilen vår. Strømmen vil ta seg av å skrive disse dataene til data.txt-filen.

Hvis du åpner data.txt-filen, vil du nå se følgende data i filen

Opplæring om Node.js

Introduksjon

Kommende hendelser

Generators

Datatilkobling

Ved hjelp av Jasmine

Rør i Node.js

Innen Node-applikasjoner kan strømmer kobles sammen ved å bruke pipe()-metoden, som tar to argumenter:

  • En nødvendig skrivbar strøm som fungerer som destinasjonen for dataene og
  • Et valgfritt objekt som brukes til å sende inn alternativer.

Et typisk eksempel på bruk av pipes, hvis du ønsker å overføre data fra en fil til en annen.

Så la oss se et eksempel på hvordan vi kan overføre data fra en fil til den andre ved hjelp av rør.

Trinn 1) Lag en fil kalt datainput.txt som har dataene nedenfor. La oss anta at denne filen er lagret på D-stasjonen til vår lokale maskin.

Opplæring om Node.js

Introduksjon

Kommende hendelser

Generators

Datatilkobling

Bruker jasmin

Trinn 2) Lag en tom tom fil kalt dataOutput.txt og plasser den på D-stasjonen på din lokale maskin.

Trinn 3) Skriv koden nedenfor for å utføre overføringen av data fra datainput.txt-filen til dataOutput.txt-filen.

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 lager først en "readstream" til vår datainput.txt-fil som inneholder alle våre data som må overføres til den nye filen.
  2. Vi må da lage en "writestream" til vår dataOutput.txt-fil, som er vår tomme fil og er destinasjonen for overføring av data fra datainput.txt-filen.
  3. Vi bruker deretter pipe-kommandoen til å overføre dataene fra lesestrømmen til skrivestrømmen. Rørkommandoen vil ta alle dataene som kommer inn i lesestrømmen, og skyve den til skrivestrømmen.

Hvis du nå åpner filen dataOutput.txt, vil du se alle dataene som var til stede i filen datainput.txt.

Hendelser i Node.js

Hendelser er et av nøkkelbegrepene i Node.js, og noen ganger blir Node.js referert til som et hendelsesdrevet rammeverk.

I utgangspunktet er en hendelse noe som skjer. For eksempel, hvis en tilkobling opprettes til en database, utløses databasetilkoblingshendelsen. Hendelsesdrevet programmering er å lage funksjoner som utløses når spesifikke hendelser utløses.

La oss se på et grunnleggende eksempel på å definere en hendelse i Node.js.

Vi skal lage en hendelse kalt 'data_received'. Når denne hendelsen utløses, vil teksten "data mottatt" sendes til konsollen.

Hendelser 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. Bruk forespørselsfunksjonen for å inkludere "hendelser"-modulen. Med denne modulen vil du kunne lage hendelser i Node.js.
  2. Opprett en ny hendelsesgiver. Dette brukes til å binde hendelsen, som i vårt tilfelle er "data_received" til en tilbakeringingsfunksjon som er definert i trinn 3.
  3. Vi definerer en hendelsesdrevet funksjon som sier at hvis "data_received"-hendelsen utløses, skal vi sende ut teksten "data_received" til konsollen.
  4. Til slutt har vi en manuell utløser av hendelsen vår ved å bruke eventEmiter.emit-funksjonen. Dette vil utløse data_received-hendelsen.

Når programmet kjøres, vil teksten "data mottatt" bli sendt til konsollen som vist nedenfor.

Hendelser i Node.js

Sender ut hendelser

Når du definerer hendelser, er det forskjellige metoder for hendelser som kan påberopes. Dette emnet fokuserer på å se på hver enkelt av dem i detalj.

  1. Engangs hendelsesbehandlere

Noen ganger kan du være interessert i å reagere på en hendelse bare første gang den inntreffer. I disse situasjonene kan du bruke once()-metoden.

La oss se hvordan vi kan bruke én gang-metoden for hendelsesbehandlere.

Sender ut hendelser

Kodeforklaring:-

  1. Her bruker vi 'en gang'-metoden for å si at for hendelsen 'data_received' skal tilbakeringingsfunksjonen bare utføres én gang.
  2. Her utløser vi manuelt hendelsen 'data_received'.
  3. Når «data_received»-hendelsen utløses igjen, denne gangen, vil ingenting skje. Dette er på grunn av det første trinnet der vi sa at hendelsen bare kunne utløses én gang.

Hvis koden kjøres riktig, vil utdata i loggen være 'data_received successfully'. Denne meldingen vises bare én gang i konsollen.

  1. Inspeksjon av arrangementslyttere

På et hvilket som helst tidspunkt i levetiden kan en hendelsessender ha null eller flere lyttere knyttet til seg. Lytterne for hver hendelsestype kan inspiseres på flere måter.

Hvis du bare er interessert i å bestemme antall tilknyttede lyttere, trenger du ikke se lenger enn til EventEmitter.listenerCount()-metoden.

(OBS: Lyttere er viktige fordi hovedprogrammet skal vite om lyttere legges til på et øyeblikk til et arrangement, ellers vil programmet ikke fungere fordi flere lyttere blir oppringt.)

Sender ut hendelser

Kodeforklaring:-

  1. Vi definerer en eventEmitter-type som kreves for å bruke de hendelsesrelaterte metodene.
  2. Vi definerer da et objekt kalt emitter som skal brukes til å definere våre hendelsesbehandlere.
  3. Vi oppretter 2 hendelsesbehandlere som i utgangspunktet ikke gjør noe. Dette holdes enkelt for vårt eksempel bare for å vise hvordan listenerCount-metoden fungerer.
  4. Når du nå påkaller listenerCount-metoden på vår data_received-hendelse, vil den sende antallet hendelseslyttere knyttet til denne hendelsen i konsollloggen.

Hvis koden utføres riktig, vil verdien på 2 vises i konsollloggen.

  1. Den nyeListener Event

Hver gang en ny hendelsesbehandler registreres, sender hendelsessenderen ut en newListener-hendelse. Denne hendelsen brukes til å oppdage nye hendelsesbehandlere. Du bruker vanligvis newListener-hendelse når du trenger å tildele ressurser eller utføre en handling for hver nye hendelsesbehandler.

Sender ut hendelser

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 oppretter en ny hendelsesbehandler for «newListener»-hendelsen. Så hver gang en ny hendelsesbehandler blir registrert, vil teksten "Lagt til lytter for" + hendelsesnavnet vises i konsollen.
  2. Her skriver vi til konsollen teksten "Lagt til lytter for" + hendelsesnavnet for hver registrerte hendelse.
  3. Vi definerer 2 hendelsesbehandlere for vår hendelse 'data_received'.

Hvis koden ovenfor utføres riktig, vil teksten nedenfor vises i konsollen. Det viser bare at "newListener" hendelsesbehandleren ble utløst to ganger.

Lagt til lytter for data_received-hendelser

Lagt til lytter for data_received-hendelser

Sammendrag

  • Strømmer brukes i Node.js for å lese og skrive data fra Input-Output-enheter. node.js bruker "fs"-biblioteket for å lage lesbare og skrivbare strømmer til filer. Disse strømmene kan brukes til å lese og skrive data fra filer.
  • Rør kan brukes til å koble flere strømmer sammen. Et av de vanligste eksemplene er å koble lese- og skrivestrømmen sammen for overføring av data fra en fil til den andre.
  • Node.js er ofte også merket som et hendelsesdrevet rammeverk, og det er veldig enkelt å definere hendelser i Node.js. Funksjoner kan defineres som reagerer på disse hendelsene.
  • Hendelser avslører også metoder for å reagere på sentrale hendelser. For eksempel har vi sett hendelsesbehandleren once() som kan brukes til å sikre at en tilbakeringingsfunksjon kun utføres én gang når en hendelse utløses.