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
Aktiviteter
Datatilkobling
Bruker jasmin
Trinn 2) Skriv den relevante koden som vil bruke strรธmmer for รฅ lese data fra filen.
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:-
- Vi mรฅ fรธrst inkludere 'fs'-modulene som inneholder all funksjonaliteten som kreves for รฅ lage strรธmmer.
- Deretter lager vi en lesbar strรธm ved รฅ bruke metoden โ createReadStream. Som en input gir vi plasseringen til data.txt-filen vรฅr.
- 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.
- Vi tar hver del av data som leses fra datastrรธmmen og konverterer den til en streng.
- Til slutt sender vi utdataene fra hver strengkonverterte del til konsollen.
Utgang:
- 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.
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:-
- Vi lager en skrivbar strรธm ved รฅ bruke metoden โ createWriteStream. Som en input gir vi plasseringen til data.txt-filen vรฅr.
- 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
Aktiviteter
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
Aktiviteter
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.
var fs = require("fs");
var readStream = fs.createReadStream("D://datainput.txt");
var writeStream = fs.createWriteStream("D://dataOutput.txt");
readStream.pipe(writeStream);
Code Forklaring:-
- 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.
- 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.
- 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.
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:-
- Bruk forespรธrselsfunksjonen for รฅ inkludere "hendelser"-modulen. Med denne modulen vil du kunne lage hendelser i Node.js.
- 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.
- Vi definerer en hendelsesdrevet funksjon som sier at hvis "data_received"-hendelsen utlรธses, skal vi sende ut teksten "data_received" til konsollen.
- 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.
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.
- 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.
Code Forklaring:-
- Her bruker vi 'en gang'-metoden for รฅ si at for hendelsen 'data_received' skal tilbakeringingsfunksjonen bare utfรธres รฉn gang.
- Her utlรธser vi manuelt hendelsen 'data_received'.
- 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.
- 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.)
Code Forklaring:-
- Vi definerer en eventEmitter-type som kreves for รฅ bruke de hendelsesrelaterte metodene.
- Vi definerer da et objekt kalt emitter som skal brukes til รฅ definere vรฅre hendelsesbehandlere.
- 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.
- 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.
- 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.
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:-
- 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.
- Her skriver vi til konsollen teksten "Lagt til lytter for" + hendelsesnavnet for hver registrerte hendelse.
- 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.









