Node js Streams Tutorial: Dateistream, Pipes

Inhaltsverzeichnis:

Anonim

In diesem Tutorial lernen Sie

  • Dateistream in Node.js
  • Pipes in Node.js
  • Ereignisse in Node.js.
  • Ereignisse senden

Dateistream in Node.js

Node nutzt Streams in großem Umfang als Datenübertragungsmechanismus.

Wenn Sie beispielsweise mit der Funktion console.log etwas an die Konsole ausgeben, verwenden Sie tatsächlich einen Stream, um die Daten an die Konsole zu senden.

Node.js kann auch Daten aus Dateien streamen, damit sie ordnungsgemäß gelesen und geschrieben werden können. Wir werden uns nun ein Beispiel ansehen, wie wir Streams zum Lesen und Schreiben aus Dateien verwenden können. Wir müssen die unten genannten Schritte für dieses Beispiel ausführen

Schritt 1) Erstellen Sie eine Datei mit dem Namen data.txt, die die folgenden Daten enthält. Angenommen, diese Datei ist auf dem Laufwerk D unseres lokalen Computers gespeichert.

Tutorial auf Node.js.

Einführung

Veranstaltungen

Generatoren

Datenkonnektivität

Mit Jasmin

Schritt 2) Schreiben Sie den entsprechenden Code, der Streams zum Lesen von Daten aus der Datei verwendet.

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 Erläuterung: -

  1. Wir müssen zuerst die 'fs'-Module einbinden, die alle Funktionen enthalten, die zum Erstellen von Streams erforderlich sind.
  2. Als nächstes erstellen wir einen lesbaren Stream mit der Methode createReadStream. Als Eingabe geben wir den Speicherort unserer Datei data.txt an.
  3. Die Funktion steam.on ist ein Ereignishandler, und darin geben wir den ersten Parameter als 'Daten' an. Dies bedeutet, dass Sie immer dann, wenn Daten aus der Datei in den Stream kommen, eine Rückruffunktion ausführen. In unserem Fall definieren wir eine Rückruffunktion, die zwei grundlegende Schritte ausführt. Die erste besteht darin, die aus der Datei gelesenen Daten als Zeichenfolge zu konvertieren. Die zweite Möglichkeit besteht darin, die konvertierte Zeichenfolge als Ausgabe an die Konsole zu senden.
  4. Wir nehmen jeden Datenblock, der aus dem Datenstrom gelesen wird, und konvertieren ihn in eine Zeichenfolge.
  5. Schließlich senden wir die Ausgabe jedes konvertierten String-Chunks an die Konsole.

Ausgabe:

  • Wenn der Code ordnungsgemäß ausgeführt wird, wird die obige Ausgabe in der Konsole angezeigt. Diese Ausgabe entspricht der in der Datei data.txt.

In eine Datei schreiben

Auf die gleiche Weise, wie wir einen Lesestream erstellen, können wir auch einen Schreibstrom erstellen, um Daten in eine Datei zu schreiben. Erstellen wir zunächst eine leere Datei ohne Inhalt mit dem Namen data.txt. Nehmen wir an, diese Datei befindet sich auf dem Laufwerk D unseres Computers.

Der folgende Code zeigt, wie wir Daten in die Datei schreiben können.

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 Erläuterung: -

  1. Wir erstellen einen beschreibbaren Stream mit der Methode createWriteStream. Als Eingabe geben wir den Speicherort unserer Datei data.txt an.
  2. Als nächstes haben wir die Methode stream.write verwendet, um die verschiedenen Textzeilen in unsere Textdatei zu schreiben. Der Stream kümmert sich darum, diese Daten in die Datei data.txt zu schreiben.

Wenn Sie die Datei data.txt öffnen, werden die folgenden Daten in der Datei angezeigt

Tutorial auf Node.js.

Einführung

Veranstaltungen

Generatoren

Datenkonnektivität

Mit Jasmin

Pipes in Node.js

In Knotenanwendungen können Streams mithilfe der pipe () -Methode zusammengeleitet werden, die zwei Argumente akzeptiert:

  • Ein erforderlicher beschreibbarer Stream, der als Ziel für die Daten und dient
  • Ein optionales Objekt zum Übergeben von Optionen.

Ein typisches Beispiel für die Verwendung von Pipes, wenn Sie Daten von einer Datei in die andere übertragen möchten.

Schauen wir uns also ein Beispiel an, wie wir Daten mithilfe von Pipes von einer Datei in die andere übertragen können.

Schritt 1) Erstellen Sie eine Datei mit dem Namen datainput.txt, die die folgenden Daten enthält. Angenommen, diese Datei ist auf dem Laufwerk D unseres lokalen Computers gespeichert.

Tutorial auf Node.js.

Einführung

Veranstaltungen

Generatoren

Datenkonnektivität

Mit Jasmin

Schritt 2) Erstellen Sie eine leere leere Datei mit dem Namen dataOutput.txt und platzieren Sie sie auf dem Laufwerk D Ihres lokalen Computers.

Schritt 3) Schreiben Sie den folgenden Code, um die Datenübertragung von der Datei datainput.txt in die Datei dataOutput.txt durchzuführen.

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

Code Erläuterung: -

  1. Wir erstellen zuerst einen "Readstream" für unsere Datei datainput.txt, der alle unsere Daten enthält, die in die neue Datei übertragen werden müssen.
  2. Wir müssen dann einen "Writestream" für unsere Datei dataOutput.txt erstellen. Dies ist unsere leere Datei und das Ziel für die Übertragung von Daten aus der Datei datainput.txt.
  3. Wir verwenden dann den Befehl pipe, um die Daten vom Lesestream zum Schreibstrom zu übertragen. Der Pipe-Befehl nimmt alle Daten, die in den Readstream eingehen, und sendet sie an den Writestream.

Wenn Sie jetzt die Datei dataOutput.txt öffnen, werden alle Daten angezeigt, die in der Datei datainput.txt vorhanden waren.

Ereignisse in Node.js.

Ereignisse sind eines der Schlüsselkonzepte in Node.js, und manchmal wird Node.js als ereignisgesteuertes Framework bezeichnet.

Grundsätzlich ist ein Ereignis etwas, das passiert. Wenn beispielsweise eine Verbindung zu einer Datenbank hergestellt wird, wird das Datenbankverbindungsereignis ausgelöst. Ereignisgesteuerte Programmierung besteht darin, Funktionen zu erstellen, die ausgelöst werden, wenn bestimmte Ereignisse ausgelöst werden.

Schauen wir uns ein grundlegendes Beispiel für die Definition eines Ereignisses in Node.js an.

Wir werden ein Ereignis namens 'data_received' erstellen. Wenn dieses Ereignis ausgelöst wird, wird der Text "Daten empfangen" an die Konsole gesendet.

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

Code Erläuterung: -

  1. Verwenden Sie die Funktion require, um das Modul 'events' einzuschließen. Mit diesem Modul können Sie Ereignisse in Node.js erstellen.
  2. Erstellen Sie einen neuen Ereignisemitter. Dies wird verwendet, um das Ereignis, in unserem Fall "data_received", an eine Rückruffunktion zu binden, die in Schritt 3 definiert ist.
  3. Wir definieren eine ereignisgesteuerte Funktion, die besagt, dass wir im Falle der Auslösung des Ereignisses "data_received" den Text "data_received" an die Konsole ausgeben sollten.
  4. Schließlich haben wir einen manuellen Auslöser unseres Ereignisses mit der Funktion eventEmiter.emit. Dies löst das Ereignis data_received aus.

Wenn das Programm ausgeführt wird, wird der Text "Daten empfangen" wie unten gezeigt an die Konsole gesendet.

Ereignisse senden

Beim Definieren von Ereignissen gibt es verschiedene Methoden für Ereignisse, die aufgerufen werden können. Dieses Thema konzentriert sich darauf, jeden einzelnen von ihnen im Detail zu betrachten.

  1. Einmalige Event-Handler

Manchmal sind Sie möglicherweise daran interessiert, auf ein Ereignis nur beim ersten Auftreten zu reagieren. In diesen Situationen können Sie die Methode Once () verwenden.

Mal sehen, wie wir die einmalige Methode für Ereignishandler verwenden können.

Code Erläuterung: -

  1. Hier verwenden wir die Methode 'einmal', um zu sagen, dass für das Ereignis 'data_received' die Rückruffunktion nur einmal ausgeführt werden sollte.
  2. Hier lösen wir das Ereignis 'data_received' manuell aus.
  3. Wenn das Ereignis 'data_received' erneut ausgelöst wird, geschieht diesmal nichts. Dies liegt an dem ersten Schritt, bei dem wir sagten, dass das Ereignis nur einmal ausgelöst werden kann.

Wenn der Code ordnungsgemäß ausgeführt wird, lautet die Ausgabe im Protokoll "Daten erfolgreich empfangen". Diese Meldung wird nur einmal in der Konsole angezeigt.

  1. Überprüfen von Ereignis-Listenern

Zu jedem Zeitpunkt seiner Lebensdauer kann ein Ereignisemitter null oder mehr Listener haben. Die Listener für jeden Ereignistyp können auf verschiedene Arten überprüft werden.

Wenn Sie nur die Anzahl der angehängten Listener ermitteln möchten, ist die EventEmitter.listenerCount () -Methode genau das Richtige für Sie.

( Hinweis: Listener sind wichtig, da das Hauptprogramm wissen sollte, ob Listener im laufenden Betrieb zu einem Ereignis hinzugefügt werden. Andernfalls funktioniert das Programm nicht, da zusätzliche Listener aufgerufen werden.)

Code Erläuterung: -

  1. Wir definieren einen eventEmitter-Typ, der für die Verwendung der ereignisbezogenen Methoden erforderlich ist.
  2. Wir definieren dann ein Objekt namens Emitter, das zum Definieren unserer Ereignishandler verwendet wird.
  3. Wir erstellen 2 Event-Handler, die im Grunde nichts tun. Dies wird in unserem Beispiel einfach gehalten, um zu zeigen, wie die listenerCount-Methode funktioniert.
  4. Wenn Sie jetzt die listenerCount-Methode für unser Ereignis data_received aufrufen, wird die Anzahl der an dieses Ereignis angehängten Ereignis-Listener im Konsolenprotokoll gesendet.

Wenn der Code ordnungsgemäß ausgeführt wird, wird der Wert 2 im Konsolenprotokoll angezeigt.

  1. Das newListener-Ereignis

Jedes Mal, wenn ein neuer Ereignishandler registriert wird, gibt der Ereignisemitter ein neues Listener-Ereignis aus. Dieses Ereignis wird verwendet, um neue Ereignishandler zu erkennen. Normalerweise verwenden Sie das newListener-Ereignis, wenn Sie Ressourcen zuweisen oder für jeden neuen Ereignishandler eine Aktion ausführen müssen.

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 Erläuterung: -

  1. Wir erstellen einen neuen Ereignishandler für das Ereignis 'newListener'. Wenn also ein neuer Ereignishandler registriert wird, wird der Text "Listener hinzugefügt für" + der Ereignisname in der Konsole angezeigt.
  2. Hier schreiben wir an die Konsole den Text "Listener hinzugefügt für" + den Ereignisnamen für jedes registrierte Ereignis.
  3. Wir definieren 2 Ereignishandler für unser Ereignis 'data_received'.

Wenn der obige Code ordnungsgemäß ausgeführt wird, wird der folgende Text in der Konsole angezeigt. Es zeigt nur, dass der Ereignishandler 'newListener' zweimal ausgelöst wurde.

Listener für data_received-Ereignisse hinzugefügt

Listener für data_received-Ereignisse hinzugefügt

Zusammenfassung

  • Streams werden in Node.js zum Lesen und Schreiben von Daten von Eingabe-Ausgabe-Geräten verwendet. Node.js verwendet die 'fs'-Bibliothek, um lesbare und beschreibbare Streams zu Dateien zu erstellen. Diese Streams können zum Lesen und Schreiben von Daten aus Dateien verwendet werden.
  • Pipes können verwendet werden, um mehrere Streams miteinander zu verbinden. Eines der häufigsten Beispiele ist das Zusammenleiten des Lese- und Schreibstroms für die Übertragung von Daten von einer Datei in die andere.
  • Node.js wird häufig auch als ereignisgesteuertes Framework gekennzeichnet, und es ist sehr einfach, Ereignisse in Node.js zu definieren. Es können Funktionen definiert werden, die auf diese Ereignisse reagieren.
  • Ereignisse stellen auch Methoden zum Reagieren auf Schlüsselereignisse bereit. Zum Beispiel haben wir den Ereignishandler Once () gesehen, mit dem sichergestellt werden kann, dass eine Rückruffunktion nur einmal ausgeführt wird, wenn ein Ereignis ausgelöst wird.