I denne veiledningen vil du lære
- Filestream i Node.js
- Rør i Node.js
- Hendelser i Node.js
- Send ut hendelser
Filestream i Node.js
Node bruker omfattende strømmer som en dataoverføringsmekanisme.
Når du for eksempel sender ut noe til konsollen ved hjelp av 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 vil 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) Opprett en fil som heter data.txt som har dataene nedenfor. La oss anta at denne filen er lagret på D-stasjonen til den lokale maskinen vår.
Opplæring på Node.js
Introduksjon
arrangementer
Generatorer
Datatilkobling
Bruke Jasmine
Trinn 2) Skriv den aktuelle koden som vil bruke strømmer til å 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);});
Kode 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 hjelp av metoden - createReadStream. Som inndata gir vi plasseringen til data.txt-filen.
- 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, utfører du en tilbakeringingsfunksjon. I vårt tilfelle definerer vi en tilbakeringingsfunksjon som vil utføre to grunnleggende trinn. Den første er å konvertere dataene som er lest fra filen som en streng. Det andre ville være å sende den konverterte strengen som en utgang til konsollen.
- Vi tar hvert stykke data som blir lest fra datastrømmen og konverterer det til en streng.
- Til slutt sender vi utdataene fra hver strengkonverterte del til konsollen.
Produksjon:
- Hvis koden utføres riktig, vil du se ovennevnte utdata i konsollen. Denne utgangen vil være den samme som i data.txt-filen.
Skriver til en fil
På samme måte, at vi oppretter en lesestrøm, kan vi også opprette 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")
Kode Forklaring: -
- Vi lager en skrivbar strøm ved å bruke metoden - createWriteStream. Som inndata gir vi plasseringen til data.txt-filen.
- Deretter brukte vi stream.write en metode for å skrive de forskjellige tekstlinjene til tekstfilen vår. Strømmen tar 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 på Node.js
Introduksjon
arrangementer
Generatorer
Datatilkobling
Bruke Jasmine
Rør i Node.js
Innenfor Node-applikasjoner kan strømmer røres sammen ved hjelp av pipe () -metoden, som tar to argumenter:
- En påkrevd skrivbar strøm som fungerer som destinasjonen for dataene og
- Et valgfritt objekt som brukes til å gi inn alternativer.
Et typisk eksempel på bruk av rør hvis du vil 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) Opprett en fil som heter datainput.txt som har dataene nedenfor. La oss anta at denne filen er lagret på D-stasjonen til den lokale maskinen vår.
Opplæring på Node.js
Introduksjon
arrangementer
Generatorer
Datatilkobling
Bruke Jasmine
Trinn 2) Opprett en tom tom fil kalt dataOutput.txt og plasser den på D-stasjonen på din lokale maskin.
Trinn 3) Skriv koden nedenfor for å overføre 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);
Kode Forklaring: -
- Vi lager først en "readstream" til datainput.txt-filen som inneholder alle dataene våre som må overføres til den nye filen.
- Vi må da lage en "skrivestrøm" til dataOutput.txt-filen, som er vår tomme fil og er målet for overføring av data fra datainput.txt-filen.
- Vi bruker deretter rørkommandoen for å overføre dataene fra lesestrømmen til skrivestrømmen. Rørkommandoen tar alle dataene som kommer inn i lesestrømmen, og skyver den til skrivestrømmen.
Hvis du nå åpner dataOutput.txt-filen, vil du se alle dataene som var til stede i datainput.txt-filen.
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 forbindelse opprettes til en database, blir databasetilkoblingshendelsen utløst. Hendelsesdrevet programmering er å lage funksjoner som vil 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, sendes teksten "data mottatt" 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');
Kode Forklaring: -
- Bruk funksjonen krever for å inkludere 'events' -modulen. Med denne modulen vil du kunne lage hendelser i Node.js.
- Opprett en ny hendelsesemitter. Dette brukes til å binde hendelsen, som i vårt tilfelle er "data_ mottatt" til en tilbakeringingsfunksjon som er definert i trinn 3.
- Vi definerer en hendelsesdrevet funksjon som sier at hvis "data_received" -hendelsen utløses, bør vi sende teksten "data_received" til konsollen.
- Til slutt har vi en manuell utløser av arrangementet vårt ved hjelp av eventEmiter.emit-funksjonen. Dette vil utløse data-mottatt hendelse.
Når programmet kjøres, sendes teksten "mottatt data" til konsollen som vist nedenfor.
Send 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.
- Én gang 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 en gang () -metoden.
La oss se hvordan vi kan bruke en gang-metoden for hendelsesbehandlere.
Kode Forklaring: -
- Her bruker vi 'en gang' -metoden for å si at for hendelsen 'data_ mottatt', skal tilbakeringingsfunksjonen bare utføres en gang.
- Her utløser vi hendelsen 'data_received' manuelt.
- Når 'data_received' hendelsen utløses igjen, vil denne gangen ingenting skje. Dette er på grunn av det første trinnet der vi sa at arrangementet bare kunne utløses en gang.
Hvis koden kjøres riktig, vil utdataene i loggen 'data_mottatt vellykket'. Denne meldingen vises bare en gang i konsollen.
- Inspisere begivenhetslyttere
Når som helst i løpet av livet, kan en hendelsesutsender ha null eller flere lyttere knyttet til seg. Lytterne for hver arrangementstype kan inspiseres på flere måter.
Hvis du bare er interessert i å bestemme antall tilknyttede lyttere, må du ikke se lenger enn metoden EventEmitter.listenerCount ().
( Merk: Lyttere er viktige fordi hovedprogrammet skal vite om lyttere blir lagt til i løpet av en begivenhet, ellers vil programmet fungere fordi flere lyttere blir ringt.)
Kode Forklaring: -
- Vi definerer en eventEmitter-type som kreves for å bruke de hendelsesrelaterte metodene.
- Vi definerer deretter et objekt som heter emitter som skal brukes til å definere hendelsesbehandlerne våre.
- Vi lager to hendelser som i utgangspunktet ikke gjør noe. Dette holdes enkelt for vårt eksempel bare for å vise hvordan listenerCount-metoden fungerer.
- Nå når du påkaller listenerCount-metoden på vår data-mottatte hendelse, vil den sende antall hendelseslyttere knyttet til denne hendelsen i konsolloggen.
Hvis koden utføres riktig, vises verdien 2 i konsolloggen.
- The newListener Event
Hver gang en ny hendelsesbehandler blir registrert, sender hendelsesutsenderen ut en newListener-hendelse. Denne hendelsen brukes til å oppdage nye hendelsesbehandlere. Du bruker vanligvis newListener-hendelsen når du trenger å tildele ressurser eller utføre noen handlinger 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() {});
Kode Forklaring: -
- Vi oppretter en ny hendelsesbehandler for begivenheten 'newListener'. Så når en ny hendelsesbehandler er registrert, vises teksten "Lagt til lytter til" + hendelsesnavnet i konsollen.
- Her skriver vi til konsollen teksten "Lagt til lytter for" + hendelsesnavnet for hvert arrangement som er registrert.
- Vi definerer to hendelsesbehandlere for arrangementet vårt 'data_received'.
Hvis koden ovenfor kjøres riktig, vil teksten nedenfor vises i konsollen. Det viser bare at 'newListener' hendelsesbehandler ble utløst to ganger.
Lagt til lytter for datamottatte hendelser
Lagt til lytter for datamottatte hendelser
Sammendrag
- Strømmer brukes i Node.js til å lese og skrive data fra Input-Output-enheter. Node.js bruker biblioteket 'fs' for å lage lesbare og skrivbare strømmer til filer. Disse streamene 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 å pipe lese- og skrivestrømmen sammen for overføring av data fra den ene filen 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 svarer på disse hendelsene.
- Hendelser avslører også metoder for å svare på viktige hendelser. For eksempel har vi sett en gang () hendelsesbehandler som kan brukes til å sikre at en tilbakeringingsfunksjon bare utføres en gang når en hendelse utløses.