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

Obsah:

Anonim

V tomto výukovém programu se naučíte

  • Filestream v Node.js
  • Potrubí v Node.js
  • Události v Node.js
  • Vysílání událostí

Filestream v Node.js

Node hojně využívá proudy jako mechanismus přenosu dat.

Například když na konzolu pomocí funkce console.log odešlete cokoli, ve skutečnosti používáte datový proud k odeslání dat do konzoly.

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í streamů číst a zapisovat ze souborů. V tomto příkladu 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 pro Node.js

Úvod

Události

Generátory

Datové připojení

Používání Jasmine

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

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 zadáme 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, proveďte funkci 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 poslat převedený řetězec jako výstup do konzoly.
  4. Bereme každou část dat, která se čte z datového proudu, a převádíme ji na řetězec.
  5. Nakonec odesíláme výstup každého převedeného bloku řetězce do konzoly.

Výstup:

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

Zápis do souboru

Stejným způsobem, že vytvoříme datový proud pro čtení, můžeme také vytvořit datový proud pro zápis dat do souboru. Nejprve vytvořme prázdný soubor bez obsahu nazvaný 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.

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 zadáme umístění našeho souboru data.txt.
  2. Dále jsme použili stream.write a method to write the different lines of text to our text file. Stream se postará o zápis těchto dat do souboru data.txt.

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

Výukový program pro Node.js

Úvod

Události

Generátory

Datové připojení

Používání Jasmine

Potrubí v Node.js

V rámci aplikací Node lze datové proudy propojit pomocí metody pipe (), která vyžaduje dva argumenty:

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

Typický příklad použití kanálů, pokud chcete přenést data z jednoho souboru do druhého.

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

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 pro Node.js

Úvod

Události

Generátory

Datové připojení

Používání Jasmine

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 k provedení přenosu dat ze souboru datainput.txt do souboru dataOutput.txt.

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. Poté musíme vytvořit „writeestream“ pro náš soubor dataOutput.txt, což je náš prázdný soubor a cíl pro přenos dat ze souboru datainput.txt.
  3. Potom použijeme příkaz pipe k přenosu dat z readstream do stream pro zápis. Příkaz pipe vezme všechna data, která přicházejí do readstreamu, a posílá je do souboru writeestream.

Pokud nyní otevřete soubor dataOutput.txt, uvidíte všechna data, která byla 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 rámec řízený událostmi.

Událost je v zásadě něco, co se stane. Například pokud je navázáno připojení k databázi, spustí se událost připojení k databázi. Programování řízené událostmi je vytvořit funkce, které se spustí, když se spustí konkrétní událost.

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

Chystáme se vytvořit událost nazvanou „data_received“. Když je tato událost spuštěna, bude na konzolu odeslán text „data přijata“.

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. Pomocí funkce require zahrňte modul „události“. S tímto modulem budete moci vytvářet události v Node.js.
  2. Vytvořte nový vysílač 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 funkci řízenou událostmi, která říká, že pokud se spustí událost „data_received“, měli bychom do konzoly odeslat text „data_received“.
  4. Nakonec máme ruční spuštění naší události pomocí funkce eventEmiter.emit. Tím se spustí událost data_received.

Po spuštění programu se na konzolu odešle text „data přijata“, jak je uvedeno níže.

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 detailní pohled na každou z nich.

  1. Jednorázové obslužné rutiny událostí

Někdy by vás mohlo zajímat, že budete reagovat na událost pouze poprvé, kdy k ní dojde. V těchto situacích můžete použít metodu once ().

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

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. Důvodem je první krok, kdy jsme řekli, že událost mohla být spuštěna pouze jednou.

Pokud je kód proveden správně, výstup v protokolu bude „data_received úspěšně“. Tato zpráva se v konzole zobrazí pouze jednou.

  1. Kontrola posluchačů událostí

V jaké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 zkontrolovat několika způsoby.

Pokud vás zajímá pouze určení počtu připojených posluchačů, 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 za běhu události, jinak by program selhal, protože budou voláni další posluchači.)

Vysvětlení kódu: -

  1. Definujeme typ eventEmitter, který je vyžadován pro použití metod souvisejících s událostmi.
  2. Poté definujeme objekt s názvem emitor, který bude použit k definování našich obslužných rutin událostí.
  3. Vytváříme 2 obslužné rutiny událostí, které v podstatě nic nedělají. V našem příkladu je to jednoduché, abychom ukázali, jak funguje metoda listenerCount.
  4. Nyní, když vyvoláte metodu listenerCount v naší události data_received, odešle počet posluchačů událostí 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. Událost newListener

Pokaždé, když je zaregistrována nová obslužná rutina události, emitor události vydá 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 obslužnou rutinu události.

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 nový obslužný program události pro událost 'newListener'. Takže kdykoli je zaregistrován nový obslužný program události, v konzole se zobrazí text „Přidán posluchač pro“ + název události.
  2. Zde píšeme do konzoly text „Přidán posluchač pro“ + název události pro každou zaregistrovanou 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 text níže. Prostě 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

souhrn

  • Proudy se v Node.js používají ke čtení a zápisu dat ze vstupně-výstupních zařízení. Node.js využívá knihovnu 'fs' k vytváření čitelných a zapisovatelných streamů do souborů. Tyto proudy lze použít ke čtení a zápisu dat ze souborů.
  • Potrubí lze použít k propojení více proudů dohromady. Jedním z nejběžnějších příkladů je propojení kanálu pro čtení a zápis pro přenos dat z jednoho souboru do druhého.
  • Node.js je často také označován jako rámec řízený událostmi a je velmi snadné definovat události v Node.js. Lze definovat funkce, které reagují na tyto události.
  • Události také vystavují metody pro reakci na klíčové události. Například jsme viděli obslužnou rutinu události once (), kterou lze použít k zajištění toho, že funkce zpětného volání je spuštěna pouze jednou, když je spuštěna událost.