Node js Streams-zelfstudie: Filestream, Pipes

Inhoudsopgave:

Anonim

In deze tutorial leer je

  • Filestream in Node.js
  • Buizen in Node.js
  • Gebeurtenissen in Node.js
  • Gebeurtenissen uitzenden

Filestream in Node.js

Node maakt uitgebreid gebruik van streams als mechanisme voor gegevensoverdracht.

Als u bijvoorbeeld iets naar de console uitvoert met de functie console.log, gebruikt u feitelijk een stream om de gegevens naar de console te verzenden.

Node.js heeft ook de mogelijkheid om gegevens uit bestanden te streamen, zodat ze op de juiste manier kunnen worden gelezen en geschreven. We zullen nu een voorbeeld bekijken van hoe we streams kunnen gebruiken om uit bestanden te lezen en te schrijven. We moeten de onderstaande stappen volgen voor dit voorbeeld

Stap 1) Maak een bestand met de naam data.txt met de onderstaande gegevens. Laten we aannemen dat dit bestand is opgeslagen op de D-schijf van onze lokale machine.

Zelfstudie over Node.js

Invoering

Evenementen

Generatoren

Data connectiviteit

Jasmine gebruiken

Stap 2) Schrijf de relevante code die gebruikmaakt van streams om gegevens uit het bestand te lezen.

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 Verklaring: -

  1. We moeten eerst de 'fs'-modules opnemen die alle functionaliteit bevatten die nodig is om streams te maken.
  2. Vervolgens maken we een leesbare stream met behulp van de methode - createReadStream. Als invoer geven we de locatie van ons data.txt-bestand.
  3. De steam.on-functie is een gebeurtenishandler en daarin specificeren we de eerste parameter als 'data'. Dit betekent dat wanneer er gegevens in de stream uit het bestand komen, een callback-functie wordt uitgevoerd. In ons geval definiëren we een callback-functie die 2 basisstappen zal uitvoeren. De eerste is om de gegevens die uit het bestand worden gelezen, om te zetten in een string. De tweede zou zijn om de geconverteerde string als uitvoer naar de console te sturen.
  4. We nemen elk stuk gegevens dat uit de datastroom wordt gelezen en zetten dit om in een string.
  5. Ten slotte sturen we de uitvoer van elke geconverteerde snaar naar de console.

Uitgang:

  • Als de code correct wordt uitgevoerd, ziet u de bovenstaande uitvoer in de console. Deze uitvoer is hetzelfde als die in het bestand data.txt.

Schrijven naar een bestand

Op dezelfde manier waarop we een leesstroom maken, kunnen we ook een schrijfstroom maken om gegevens naar een bestand te schrijven. Laten we eerst een leeg bestand zonder inhoud maken met de naam data.txt. Laten we aannemen dat dit bestand in de D-schijf van onze computer is geplaatst.

De onderstaande code laat zien hoe we gegevens naar het bestand kunnen schrijven.

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 Verklaring: -

  1. We maken een beschrijfbare stream met behulp van de methode - createWriteStream. Als invoer geven we de locatie van ons data.txt-bestand.
  2. Vervolgens gebruikten we de stream.write een methode om de verschillende regels tekst naar ons tekstbestand te schrijven. De stream zorgt ervoor dat deze gegevens naar het bestand data.txt worden geschreven.

Als u het bestand data.txt opent, ziet u nu de volgende gegevens in het bestand

Zelfstudie over Node.js

Invoering

Evenementen

Generatoren

Data connectiviteit

Jasmine gebruiken

Buizen in Node.js

Binnen Node-toepassingen kunnen streams aan elkaar worden gekoppeld met behulp van de methode pipe (), waarvoor twee argumenten nodig zijn:

  • Een vereiste schrijfbare stream die fungeert als de bestemming voor de gegevens en
  • Een optioneel object dat wordt gebruikt om opties door te geven.

Een typisch voorbeeld van het gebruik van pipes, als u gegevens van het ene bestand naar het andere wilt overbrengen.

Laten we dus een voorbeeld bekijken van hoe we gegevens van het ene bestand naar het andere kunnen overbrengen met behulp van pipes.

Stap 1) Maak een bestand met de naam datainput.txt met de onderstaande gegevens. Laten we aannemen dat dit bestand is opgeslagen op de D-schijf van onze lokale machine.

Zelfstudie over Node.js

Invoering

Evenementen

Generatoren

Data connectiviteit

Jasmine gebruiken

Stap 2) Maak een leeg, leeg bestand met de naam dataOutput.txt en plaats het op de D-schijf van uw lokale computer.

Stap 3) Schrijf de onderstaande code om de gegevensoverdracht van het datainput.txt-bestand naar het dataOutput.txt-bestand uit te voeren.

var fs = require("fs");var readStream = fs.createReadStream("D://datainput.txt");var writeStream = fs.createWriteStream("D://dataOutput.txt");readStream.pipe(writeStream);

Code Verklaring: -

  1. We maken eerst een "readstream" naar ons datainput.txt-bestand dat al onze gegevens bevat die naar het nieuwe bestand moeten worden overgebracht.
  2. We moeten dan een "writestream" maken naar ons dataOutput.txt-bestand, dat ons lege bestand is en de bestemming is voor de overdracht van gegevens uit het datainput.txt-bestand.
  3. Vervolgens gebruiken we het pipe-commando om de gegevens van de leesstroom naar de schrijfstroom over te dragen. Het pipe-commando neemt alle gegevens die in de readstream komen en pusht deze naar de writestream.

Als u nu het bestand dataOutput.txt opent, ziet u alle gegevens die aanwezig waren in het bestand datainput.txt.

Gebeurtenissen in Node.js

Gebeurtenissen zijn een van de belangrijkste concepten in Node.js en soms wordt Node.js een gebeurtenisgestuurd raamwerk genoemd.

Kortom, een evenement is iets dat gebeurt. Als er bijvoorbeeld een verbinding tot stand is gebracht met een database, wordt de databaseverbindingsgebeurtenis geactiveerd. Gebeurtenisgestuurd programmeren is om functies te creëren die worden geactiveerd wanneer specifieke gebeurtenissen worden geactiveerd.

Laten we eens kijken naar een eenvoudig voorbeeld van het definiëren van een evenement in Node.js.

We gaan een evenement maken met de naam 'data_received'. Wanneer deze gebeurtenis wordt geactiveerd, wordt de tekst "data ontvangen" naar de console gestuurd.

var events = require('events');var eventEmitter = new events.EventEmitter();eventEmitter.on('data_received', function() {console.log('data received succesfully.');});eventEmitter.emit('data_received');

Code Verklaring: -

  1. Gebruik de functie vereisen om de module 'gebeurtenissen' op te nemen. Met deze module kun je evenementen aanmaken in Node.js.
  2. Maak een nieuwe evenementenzender. Dit wordt gebruikt om de gebeurtenis, die in ons geval "data_received" is, te binden aan een callback-functie die is gedefinieerd in stap3.
  3. We definiëren een door gebeurtenissen aangestuurde functie die zegt dat als in het geval dat de gebeurtenis "data_received" wordt geactiveerd, we de tekst "data_received" naar de console moeten sturen.
  4. Ten slotte hebben we een handmatige trigger van onze gebeurtenis met behulp van de functie eventEmiter.emit. Dit activeert de gebeurtenis data_received.

Wanneer het programma wordt uitgevoerd, wordt de tekst "data ontvangen" naar de console gestuurd, zoals hieronder weergegeven.

Gebeurtenissen uitzenden

Bij het definiëren van gebeurtenissen zijn er verschillende methoden voor gebeurtenissen die kunnen worden aangeroepen. Dit onderwerp is erop gericht om elk van hen in detail te bekijken.

  1. Eenmalige gebeurtenishandlers

Soms ben je misschien geïnteresseerd om pas de eerste keer dat het plaatsvindt op een gebeurtenis te reageren. In deze situaties kunt u de once () - methode gebruiken.

Laten we eens kijken hoe we gebruik kunnen maken van de once-methode voor event-handlers.

Code Verklaring: -

  1. Hier gebruiken we de 'once'-methode om te zeggen dat voor de gebeurtenis' data_received 'de callback-functie slechts één keer mag worden uitgevoerd.
  2. Hier activeren we handmatig de 'data_received'-gebeurtenis.
  3. Wanneer de 'data_received'-gebeurtenis opnieuw wordt geactiveerd, gebeurt er deze keer niets. Dit komt door de eerste stap waarin we zeiden dat de gebeurtenis maar één keer kan worden geactiveerd.

Als de code correct wordt uitgevoerd, zal de uitvoer in het logboek 'data_received success' zijn. Dit bericht verschijnt maar één keer in de console.

  1. Luisteraars van gebeurtenissen inspecteren

Op elk moment in zijn leven kan een event-emitter nul of meer luisteraars hebben. De luisteraars voor elk gebeurtenistype kunnen op verschillende manieren worden geïnspecteerd.

Als je alleen geïnteresseerd bent in het bepalen van het aantal gekoppelde luisteraars, zoek dan niet verder dan de EventEmitter.listenerCount () - methode.

Code Verklaring: -

  1. We definiëren een eventEmitter-type dat vereist is voor het gebruik van de gebeurtenisgerelateerde methoden.
  2. We definiëren dan een object genaamd emitter dat zal worden gebruikt om onze event handlers te definiëren.
  3. We creëren 2 event handlers die in principe niets doen. Dit is voor ons voorbeeld eenvoudig gehouden om te laten zien hoe de listenerCount-methode werkt.
  4. Wanneer u nu de listenerCount-methode op onze data_received-gebeurtenis aanroept, wordt het aantal gebeurtenislisteners dat aan deze gebeurtenis is gekoppeld, in het consolelogboek verzonden.

Als de code correct wordt uitgevoerd, wordt de waarde van 2 weergegeven in het consolelogboek.

  1. Het newListener-evenement

Elke keer dat een nieuwe gebeurtenishandler wordt geregistreerd, zendt de gebeurtenisverzender een newListener-gebeurtenis uit. Deze gebeurtenis wordt gebruikt om nieuwe gebeurtenishandlers te detecteren. U gebruikt doorgaans de gebeurtenis newListener wanneer u bronnen moet toewijzen of een actie moet uitvoeren voor elke nieuwe gebeurtenishandler.

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 Verklaring: -

  1. We maken een nieuwe gebeurtenishandler voor de 'newListener'-gebeurtenis. Dus telkens wanneer een nieuwe gebeurtenishandler wordt geregistreerd, wordt de tekst "Toegevoegd listener voor" + de naam van de gebeurtenis weergegeven in de console.
  2. Hier schrijven we naar de console de tekst "Toegevoegde luisteraar voor" + de gebeurtenisnaam voor elke geregistreerde gebeurtenis.
  3. We definiëren 2 event handlers voor ons event 'data_received'.

Als de bovenstaande code correct wordt uitgevoerd, wordt de onderstaande tekst in de console weergegeven. Het laat alleen zien dat de gebeurtenishandler 'newListener' tweemaal is geactiveerd.

Listener toegevoegd voor data_received events

Listener toegevoegd voor data_received events

Overzicht

  • Streams worden in Node.js gebruikt om gegevens van invoer-uitvoerapparaten te lezen en te schrijven. Node.js maakt gebruik van de 'fs'-bibliotheek om leesbare en schrijfbare streams naar bestanden te maken. Deze streams kunnen worden gebruikt om gegevens uit bestanden te lezen en te schrijven.
  • Buizen kunnen worden gebruikt om meerdere stromen met elkaar te verbinden. Een van de meest voorkomende voorbeelden is het samenvoegen van de lees- en schrijfstroom voor de overdracht van gegevens van het ene bestand naar het andere.
  • Node.js wordt vaak ook getagd als een gebeurtenisgestuurd raamwerk, en het is heel eenvoudig om gebeurtenissen in Node.js te definiëren. Er kunnen functies worden gedefinieerd die op deze gebeurtenissen reageren.
  • Gebeurtenissen leggen ook methoden bloot om op belangrijke gebeurtenissen te reageren. We hebben bijvoorbeeld de gebeurtenishandler once () gezien die kan worden gebruikt om ervoor te zorgen dat een callback-functie maar één keer wordt uitgevoerd wanneer een gebeurtenis wordt geactiveerd.