I den här handledningen lär du dig
- Filestream i Node.js
- Rör i Node.js
- Händelser i Node.js
- Sänder ut händelser
Filestream i Node.js
Node använder omfattande strömmar som en dataöverföringsmekanism.
När du till exempel skickar något till konsolen med hjälp av console.log-funktionen använder du faktiskt en ström för att skicka data till konsolen.
Node.js har också möjlighet att strömma data från filer så att de kan läsas och skrivas på rätt sätt. Vi kommer nu att titta på ett exempel på hur vi kan använda strömmar för att läsa och skriva från filer. Vi måste följa nedanstående steg för detta exempel
Steg 1) Skapa en fil som heter data.txt som har nedanstående data. Låt oss anta att den här filen är lagrad på D-enheten på vår lokala maskin.
Självstudier om Node.js
Introduktion
evenemang
Generatorer
Dataanslutning
Använda Jasmine
Steg 2) Skriv den relevanta koden som kommer att använda strömmar för att läsa data från 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);});
Kodförklaring: -
- Vi måste först inkludera 'fs' -modulerna som innehåller all funktionalitet som krävs för att skapa strömmar.
- Därefter skapar vi en läsbar ström med metoden - createReadStream. Som inmatning ger vi platsen för vår data.txt-fil.
- Steam.on-funktionen är en händelsehanterare och i den anger vi den första parametern som 'data'. Det betyder att när data kommer i strömmen från filen, kör sedan en återuppringningsfunktion. I vårt fall definierar vi en återuppringningsfunktion som utför två grundläggande steg. Den första är att konvertera data som läses från filen som en sträng. Den andra skulle vara att skicka den konverterade strängen som en utgång till konsolen.
- Vi tar varje bit data som läses från dataströmmen och konverterar den till en sträng.
- Slutligen skickar vi utdata från varje strängkonverterad bit till konsolen.
Produktion:
- Om koden körs korrekt ser du ovanstående utdata i konsolen. Denna utdata är densamma som i data.txt-filen.
Skriva till en fil
På samma sätt, som vi skapar en läsström, kan vi också skapa en skrivström för att skriva data till en fil. Låt oss först skapa en tom fil utan innehåll som heter data.txt. Låt oss anta att den här filen är placerad i D-enheten på vår dator.
Koden nedan visar hur vi kan skriva data till 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")
Kodförklaring: -
- Vi skapar en skrivbar ström med metoden - createWriteStream. Som inmatning ger vi platsen för vår data.txt-fil.
- Därefter använde vi stream.write en metod för att skriva de olika textraderna till vår textfil. Strömmen tar hand om att skriva dessa data till filen data.txt.
Om du öppnar data.txt-filen ser du nu följande data i filen
Självstudier om Node.js
Introduktion
evenemang
Generatorer
Dataanslutning
Använda Jasmine
Rör i Node.js
Inom Node-applikationer kan strömmar pipas tillsammans med metoden pipe (), som tar två argument:
- En erforderlig skrivbar ström som fungerar som destination för data och
- Ett valfritt objekt som används för att skicka in alternativ.
Ett typiskt exempel på att använda rör om du vill överföra data från en fil till en annan.
Så låt oss se ett exempel på hur vi kan överföra data från en fil till en annan med rör.
Steg 1) Skapa en fil som heter datainput.txt som har nedanstående data. Låt oss anta att den här filen är lagrad på D-enheten på vår lokala maskin.
Självstudier om Node.js
Introduktion
evenemang
Generatorer
Dataanslutning
Använda Jasmine
Steg 2) Skapa en tom tom fil som heter dataOutput.txt och placera den på D-enheten på din lokala maskin.
Steg 3) Skriv nedanstående kod för att överföra data från datainput.txt-filen till dataOutput.txt-filen.
var fs = require("fs");var readStream = fs.createReadStream("D://datainput.txt");var writeStream = fs.createWriteStream("D://dataOutput.txt");readStream.pipe(writeStream);
Kodförklaring: -
- Vi skapar först en "läsström" till vår datainput.txt-fil som innehåller alla våra data som behöver överföras till den nya filen.
- Vi måste sedan skapa en "skrivström" till vår dataOutput.txt-fil, som är vår tomma fil och är destinationen för överföring av data från filen datainput.txt.
- Vi använder sedan rörkommandot för att överföra data från läsströmmen till skrivströmmen. Rörkommandot tar all data som kommer in i läsströmmen och skjuter den till skrivströmmen.
Om du nu öppnar dataOutput.txt-filen ser du all information som fanns i filen datainput.txt.
Händelser i Node.js
Händelser är ett av nyckelbegreppen i Node.js och ibland kallas Node.js som ett händelsestyrt ramverk.
I grund och botten är en händelse något som händer. Till exempel, om en anslutning upprättas till en databas, utlöses databasanslutningshändelsen. Händelsestyrd programmering är att skapa funktioner som utlöses när specifika händelser utlöses.
Låt oss titta på ett grundläggande exempel på att definiera en händelse i Node.js.
Vi ska skapa en händelse som heter 'data_received'. När denna händelse utlöses skickas texten "data mottagen" till konsolen.
var events = require('events');var eventEmitter = new events.EventEmitter();eventEmitter.on('data_received', function() {console.log('data received succesfully.');});eventEmitter.emit('data_received');
Kodförklaring: -
- Använd funktionen kräver för att inkludera modulen 'händelser'. Med den här modulen kommer du att kunna skapa händelser i Node.js.
- Skapa en ny händelseemitter. Detta används för att binda händelsen, som i vårt fall är "data_received" till en återuppringningsfunktion som definieras i steg 3.
- Vi definierar en händelsestyrd funktion som säger att om händelsen "data_received" utlöses, ska vi skicka texten "data_received" till konsolen.
- Slutligen har vi en manuell utlösare av vårt evenemang med funktionen eventEmiter.emit. Detta kommer att utlösa händelsen data_received.
När programmet körs skickas texten "data mottagen" till konsolen enligt nedan.
Sänder ut händelser
När händelser definieras finns det olika metoder för händelser som kan åberopas. Detta ämne fokuserar på att titta på var och en av dem i detalj.
- Engångshändelseshanterare
Ibland kan du vara intresserad av att reagera på en händelse bara första gången den inträffar. I dessa situationer kan du använda en gång () -metoden.
Låt oss se hur vi kan använda en gång-metoden för evenemangshanterare.
Kodförklaring: -
- Här använder vi "en gång" -metoden för att säga att för händelsen "data_received" ska återuppringningsfunktionen endast utföras en gång.
- Här utlöser vi manuellt 'data_received' händelsen.
- När "data_received" -händelsen utlöses igen kommer den här gången ingenting att hända. Detta beror på det första steget där vi sa att evenemanget bara kunde utlösas en gång.
Om koden körs ordentligt kommer utdata i loggen att 'data_mottagas framgångsrikt'. Detta meddelande visas bara en gång i konsolen.
- Inspekterar evenemangslyssnare
När som helst under sin livstid kan en händelsemitter ha noll eller fler lyssnare kopplade till sig. Lyssnarna för varje händelsetyp kan inspekteras på flera sätt.
Om du bara är intresserad av att bestämma antalet bifogade lyssnare, leta inte längre än metoden EventEmitter.listenerCount ().
( Obs! Lyssnare är viktiga eftersom huvudprogrammet borde veta om lyssnare läggs till i farten till ett evenemang, annars kommer programmet att fungera då ytterligare lyssnare kommer att ringas.)
Kodförklaring: -
- Vi definierar en eventEmitter-typ som krävs för att använda de händelserelaterade metoderna.
- Vi definierar sedan ett objekt som heter emitter som kommer att användas för att definiera våra händelsehanterare.
- Vi skapar två evenemangshanterare som i princip inte gör något. Detta hålls enkelt för vårt exempel bara för att visa hur listenerCount-metoden fungerar.
- Nu när du anropar listenerCount-metoden på vår data_received-händelse kommer den att skicka antalet händelserlyssnare som är kopplade till denna händelse i konsolloggen.
Om koden körs korrekt visas värdet 2 i konsolloggen.
- The newListener Event
Varje gång en ny händelsehanterare registreras sänder evenemangsemitteraren en newListener-händelse. Den här händelsen används för att upptäcka nya händelsehanterare. Du använder vanligtvis newListener-händelse när du behöver tilldela resurser eller utföra några åtgärder för varje ny händelsehanterare.
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() {});
Kodförklaring: -
- Vi skapar en ny händelsehanterare för händelsen 'newListener'. Så när en ny händelsehanterare registreras visas texten "Tillagd lyssnare för" + händelsens namn i konsolen.
- Här skriver vi till konsolen texten "Tillagd lyssnare för" + händelsens namn för varje registrerad händelse.
- Vi definierar två händelseshanterare för vårt evenemang 'data_received'.
Om koden ovan körs korrekt visas nedanstående text i konsolen. Det visar bara att händelsehanteraren 'newListener' utlöstes två gånger.
Tillagd lyssnare för data-mottagna händelser
Tillagd lyssnare för data-mottagna händelser
Sammanfattning
- Strömmar används i Node.js för att läsa och skriva data från Input-Output-enheter. Node.js använder biblioteket 'fs' för att skapa läsbara och skrivbara strömmar till filer. Dessa strömmar kan användas för att läsa och skriva data från filer.
- Rör kan användas för att ansluta flera strömmar tillsammans. Ett av de vanligaste exemplen är att sammanföra läs- och skrivströmmen för överföring av data från en fil till en annan.
- Node.js är ofta också märkt som ett händelsedrivet ramverk, och det är väldigt enkelt att definiera händelser i Node.js. Funktioner kan definieras som svarar på dessa händelser.
- Händelser visar också metoder för att svara på viktiga händelser. Vi har till exempel sett en gång () händelsehanteraren som kan användas för att säkerställa att en återuppringningsfunktion bara körs en gång när en händelse utlöses.