Výukový program Node js Streams: Filestream, Pipes

Filestream v Node.js

Node široce využívá streamy jako mechanismus přenosu dat.

Když například pomocí funkce console.log něco odešlete do konzole, ve skutečnosti používáte proud k odeslání dat do konzole.

Node.js má také schopnost streamovat data ze souborů, aby je bylo možné správně číst a zapisovat. Nyní se podíváme na příklad toho, jak můžeme pomocí proudů číst a zapisovat ze souborů. Pro tento příklad musíme postupovat podle níže uvedených kroků

Krok 1) Vytvořte soubor s názvem data.txt, který obsahuje níže uvedená data. Předpokládejme, že tento soubor je uložen na jednotce D našeho místního počítače.

Výukový program na Node.js

Úvod

Události

Generators

Datová konektivita

Použití jasmínu

Krok 2) Napište příslušný kód, který bude využívat proudy ke čtení dat ze souboru.

Filestream v Node.js

var fs = require("fs");
var stream;
stream = fs.createReadStream("D://data.txt");

stream.on("data", function(data) {
    var chunk = data.toString();
    console.log(chunk);
}); 

Vysvětlení kódu:-

  1. Nejprve musíme zahrnout moduly 'fs', které obsahují všechny funkce potřebné k vytváření streamů.
  2. Dále vytvoříme čitelný stream pomocí metody – createReadStream. Jako vstup uvedeme umístění našeho souboru data.txt.
  3. Funkce steam.on je obslužná rutina události a v ní zadáváme první parametr jako 'data'. To znamená, že kdykoli data přicházejí do proudu ze souboru, spustí se funkce zpětného volání. V našem případě definujeme funkci zpětného volání, která provede 2 základní kroky. První je převést data načtená ze souboru jako řetězec. Druhým by bylo odeslat převedený řetězec jako výstup do konzole.
  4. Bereme každý kus dat, který je načten z datového toku, a převádíme je na řetězec.
  5. Nakonec posíláme výstup každého převedeného chunku řetězce do konzole.

Výstup:

Filestream v Node.js

  • Pokud je kód proveden správně, uvidíte v konzole výše uvedený výstup. Tento výstup bude stejný jako v souboru data.txt.

Zápis do souboru

Stejným způsobem, jako když vytváříme čtený proud, můžeme vytvořit i zapisovací proud pro zápis dat do souboru. Nejprve vytvořte prázdný soubor bez obsahu s názvem data.txt. Předpokládejme, že tento soubor je umístěn na jednotce D našeho počítače.

Níže uvedený kód ukazuje, jak můžeme zapisovat data do souboru.

Filestream v Node.js

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") 

Vysvětlení kódu:-

  1. Vytváříme zapisovatelný stream pomocí metody – createWriteStream. Jako vstup uvedeme umístění našeho souboru data.txt.
  2. Dále jsme použili metodu stream.write k zápisu různých řádků textu do našeho textového souboru. O zápis těchto dat do souboru data.txt se postará stream.

Pokud otevřete soubor data.txt, nyní v souboru uvidíte následující data

Výukový program na Node.js

Úvod

Události

Generators

Datová konektivita

Použití Jasmín

Trubky v Node.js

V aplikacích Node lze proudy spojovat pomocí metody pipe(), která má dva argumenty:

  • Požadovaný zapisovatelný stream, který funguje jako cíl pro data a
  • Volitelný objekt používaný k předávání voleb.

Typický příklad použití rour, pokud chcete přenášet data z jednoho souboru do druhého.

Podívejme se tedy na příklad, jak můžeme přenášet data z jednoho souboru do druhého pomocí rour.

Krok 1) Vytvořte soubor s názvem datainput.txt, který obsahuje níže uvedená data. Předpokládejme, že tento soubor je uložen na jednotce D našeho místního počítače.

Výukový program na Node.js

Úvod

Události

Generators

Datová konektivita

Použití jasmínu

Krok 2) Vytvořte prázdný prázdný soubor s názvem dataOutput.txt a umístěte jej na jednotku D místního počítače.

Krok 3) Napište níže uvedený kód, abyste provedli přenos dat ze souboru datainput.txt do souboru dataOutput.txt.

Trubky v Node.js

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

Vysvětlení kódu:-

  1. Nejprve vytváříme „readstream“ do našeho souboru datainput.txt, který obsahuje všechna naše data, která je třeba přenést do nového souboru.
  2. Potom musíme vytvořit „writestream“ do našeho souboru dataOutput.txt, což je náš prázdný soubor a je cílem pro přenos dat ze souboru datainput.txt.
  3. Poté použijeme příkaz roura k přenosu dat z readstreamu do streamu pro zápis. Příkaz roura převezme všechna data, která přicházejí do proudu čtení, a vloží je do proudu pro zápis.

Pokud nyní otevřete soubor dataOutput.txt, uvidíte všechna data, která byla přítomna v souboru datainput.txt.

Události v Node.js

Události jsou jedním z klíčových konceptů v Node.js a někdy se Node.js označuje jako framework řízený událostmi.

Událost je v podstatě něco, co se stane. Pokud je například navázáno připojení k databázi, spustí se událost připojení k databázi. Programování řízené událostmi má vytvořit funkce, které budou spuštěny při spuštění konkrétních událostí.

Podívejme se na základní příklad definování události v Node.js.

Vytvoříme událost s názvem 'data_received'. Po spuštění této události bude do konzole odeslán text „data přijata“.

Události v Node.js

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

eventEmitter.emit('data_received'); 

Vysvětlení kódu:-

  1. K zahrnutí modulu 'události' použijte funkci vyžadovat. S tímto modulem budete moci vytvářet události v Node.js.
  2. Vytvořte nový emitor událostí. To se používá k navázání události, která je v našem případě „data_received“ na funkci zpětného volání, která je definována v kroku 3.
  3. Definujeme událostmi řízenou funkci, která říká, že pokud je spuštěna událost „data_received“, měli bychom do konzole vyslat text „data_received“.
  4. Konečně máme ruční spouštění naší události pomocí funkce eventEmiter.emit. Tím se spustí událost data_received.

Po spuštění programu se do konzole odešle text „data přijata“, jak je znázorněno níže.

Události v Node.js

Vysílání událostí

Při definování událostí existují různé metody pro události, které lze vyvolat. Toto téma se zaměřuje na podrobný pohled na každý z nich.

  1. Jednorázové manipulátory událostí

Někdy můžete mít zájem reagovat na událost pouze tehdy, když k ní dojde poprvé. V těchto situacích můžete použít metodu Once().

Podívejme se, jak můžeme využít metodu Once pro obsluhu událostí.

Vysílání událostí

Vysvětlení kódu:-

  1. Zde používáme metodu 'once', abychom řekli, že pro událost 'data_received' by funkce zpětného volání měla být provedena pouze jednou.
  2. Zde ručně spouštíme událost 'data_received'.
  3. Když se událost 'data_received' znovu spustí, tentokrát se nic nestane. Je to kvůli prvnímu kroku, kdy jsme řekli, že událost může být spuštěna pouze jednou.

Pokud je kód proveden správně, výstup v protokolu bude 'data_received success'. Tato zpráva se v konzole objeví pouze jednou.

  1. Kontrola posluchačů událostí

V kterémkoli okamžiku své životnosti může mít emitor události připojeno nula nebo více posluchačů. Posluchače pro každý typ události lze kontrolovat několika způsoby.

Pokud vás zajímá pouze určení počtu připojených posluchačů, pak nehledejte nic jiného než metodu EventEmitter.listenerCount().

(Poznámka: Posluchači jsou důležití, protože hlavní program by měl vědět, zda jsou posluchači přidáváni k události, jinak program nebude fungovat, protože budou voláni další posluchači.)

Vysílání událostí

Vysvětlení kódu:-

  1. Definujeme typ eventEmitter, který je vyžadován pro použití metod souvisejících s událostmi.
  2. Potom definujeme objekt nazvaný emitor, který bude použit k definování našich obslužných rutin událostí.
  3. Vytváříme 2 handlery událostí, které v podstatě nic nedělají. Pro náš příklad je to jednoduché, abychom ukázali, jak metoda listenerCount funguje.
  4. Když nyní vyvoláte metodu listenerCount v naší události data_received, odešle počet posluchačů události připojených k této události v protokolu konzoly.

Pokud je kód proveden správně, v protokolu konzoly se zobrazí hodnota 2.

  1. NewListener Event

Pokaždé, když je registrována nová obsluha události, emitor události vyšle událost newListener. Tato událost se používá k detekci nových obslužných rutin událostí. Událost newListener obvykle používáte, když potřebujete přidělit prostředky nebo provést nějakou akci pro každou novou obsluhu události.

Vysílání událostí

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() {}); 

Vysvětlení kódu:-

  1. Vytváříme novou obsluhu události pro událost 'newListener'. Kdykoli se tedy zaregistruje nová obsluha události, v konzole se zobrazí text „Přidán posluchač pro“ + název události.
  2. Zde zapisujeme do konzole text „Přidaný posluchač pro“ + název události pro každou registrovanou událost.
  3. Definujeme 2 obslužné rutiny událostí pro naši událost 'data_received'.

Pokud je výše uvedený kód proveden správně, zobrazí se v konzole níže uvedený text. To jen ukazuje, že obslužná rutina události 'newListener' byla spuštěna dvakrát.

Přidán posluchač pro události data_received

Přidán posluchač pro události data_received

Shrnutí

  • Proudy se v Node.js používají ke čtení a zápisu dat ze zařízení typu Input-Output. Node.js využívá knihovnu 'fs' k vytváření čitelných a zapisovatelných proudů do souborů. Tyto proudy lze použít ke čtení a zápisu dat ze souborů.
  • Trubky lze použít k propojení více proudů dohromady. Jedním z nejběžnějších příkladů je propojení datového proudu čtení a zápisu společně pro přenos dat z jednoho souboru do druhého.
  • Node.js je často také označen jako framework řízený událostmi a je velmi snadné definovat události v Node.js. Lze definovat funkce, které na tyto události reagují.
  • Události také odhalují metody reakce na klíčové události. Viděli jsme například obslužnou rutinu události Once(), kterou lze použít k zajištění toho, aby se funkce zpětného volání provedla pouze jednou, když je událost spuštěna.