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

Obsah:

Anonim

V tomto návode sa naučíte

  • Filestream v Node.js
  • Rúry v Node.js
  • Udalosti v Node.js
  • Vysielanie udalostí

Filestream v Node.js

Uzol vo veľkej miere využíva prúdy ako mechanizmus prenosu údajov.

Napríklad keď na konzolu niečo odošlete pomocou funkcie console.log, v skutočnosti používate na odosielanie údajov do konzoly prúd.

Node.js má tiež schopnosť streamovať údaje zo súborov, aby sa dali vhodne čítať a zapisovať. Teraz sa pozrieme na príklad toho, ako môžeme pomocou prúdov čítať a písať zo súborov. Pre tento príklad musíme postupovať podľa nižšie uvedených krokov

Krok 1) Vytvorte súbor s názvom data.txt, ktorý obsahuje nasledujúce údaje. Predpokladajme, že tento súbor je uložený na disku D nášho lokálneho počítača.

Výukový program pre Node.js

Úvod

Diania

Generátory

Dátové pripojenie

Pomocou Jasmine

Krok 2) Napíšte príslušný kód, ktorý použije prúdy na načítanie údajov zo súboru.

var fs = require("fs");var stream;stream = fs.createReadStream("D://data.txt");stream.on("data", function(data) {var chunk = data.toString();console.log(chunk);});

Vysvetlenie kódu: -

  1. Najprv musíme zahrnúť moduly „fs“, ktoré obsahujú všetky funkcie potrebné na vytváranie streamov.
  2. Ďalej vytvoríme čitateľný prúd pomocou metódy - createReadStream. Ako vstup zadáme umiestnenie nášho súboru data.txt.
  3. Funkcia steam.on je obslužnou rutinou udalostí a v nej zadávame prvý parameter ako „údaj“. To znamená, že kedykoľvek v streame prichádzajú dáta, potom vykonajte funkciu spätného volania. V našom prípade definujeme funkciu spätného volania, ktorá uskutoční 2 základné kroky. Prvým je prevod údajov načítaných zo súboru ako reťazca. Druhým by bolo poslať prevedený reťazec ako výstup do konzoly.
  4. Berieme každý kúsok dát, ktorý sa číta z dátového toku, a prevádzame ho na reťazec.
  5. Nakoniec pošleme výstup každého prevedeného bloku reťazca na konzolu.

Výkon:

  • Ak je kód vykonaný správne, uvidíte vyššie uvedený výstup v konzole. Tento výstup bude rovnaký ako výstup v súbore data.txt.

Zápis do súboru

Rovnakým spôsobom, že vytvoríme stream na čítanie, môžeme vytvoriť aj prúd na zápis na zápis údajov do súboru. Najprv vytvoríme prázdny súbor bez obsahu s názvom data.txt. Predpokladajme, že tento súbor je umiestnený na jednotke D nášho počítača.

Nasledujúci kód ukazuje, ako môžeme zapisovať údaje do súboru.

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

Vysvetlenie kódu: -

  1. Vytvárame zapisovateľný prúd pomocou metódy - createWriteStream. Ako vstup zadáme umiestnenie nášho súboru data.txt.
  2. Ďalej sme použili stream.write metódu na zápis rôznych riadkov textu do nášho textového súboru. Stream sa postará o zápis týchto údajov do súboru data.txt.

Ak otvoríte súbor data.txt, uvidíte v súbore nasledujúce údaje

Výukový program pre Node.js

Úvod

Diania

Generátory

Dátové pripojenie

Pomocou Jasmine

Rúry v Node.js

V rámci aplikácií Node môžu byť streamy navzájom prepojené pomocou metódy pipe (), ktorá vyžaduje dva argumenty:

  • Povinný zapisovateľný stream, ktorý slúži ako cieľ pre dáta a
  • Voliteľný objekt používaný na odovzdanie volieb.

Typický príklad použitia rúrok, ak chcete prenášať údaje z jedného súboru do druhého.

Pozrime sa teda na príklad, ako môžeme pomocou rúrok prenášať údaje z jedného súboru do druhého.

Krok 1) Vytvorte súbor s názvom datainput.txt, ktorý obsahuje nasledujúce údaje. Predpokladajme, že tento súbor je uložený na disku D nášho lokálneho počítača.

Výukový program pre Node.js

Úvod

Diania

Generátory

Dátové pripojenie

Pomocou Jasmine

Krok 2) Vytvorte prázdny prázdny súbor s názvom dataOutput.txt a umiestnite ho na jednotku D miestneho počítača.

Krok 3) Napíšte nasledujúci kód na vykonanie prenosu údajov zo súboru datainput.txt do súboru dataOutput.txt.

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

Vysvetlenie kódu: -

  1. Najprv vytvárame „readstream“ do nášho súboru datainput.txt, ktorý obsahuje všetky naše údaje, ktoré je potrebné preniesť do nového súboru.
  2. Potom musíme vytvoriť "writeestream" pre náš súbor dataOutput.txt, ktorý je našim prázdnym súborom a je cieľom prenosu údajov zo súboru datainput.txt.
  3. Potom pomocou príkazu pipe prenesieme údaje z čítacieho toku do toku zápisu. Príkaz pipe vezme všetky údaje prichádzajúce do čítacieho toku a prenesie ich do toku writeestream.

Ak teraz otvoríte súbor dataOutput.txt, uvidíte všetky údaje, ktoré boli v súbore datainput.txt.

Udalosti v Node.js

Udalosti sú jedným z kľúčových konceptov v Node.js a niekedy sa Node.js označuje ako rámec riadený udalosťami.

Udalosť je v podstate niečo, čo sa stane. Napríklad ak je nadviazané pripojenie k databáze, spustí sa udalosť pripojenia k databáze. Programovanie založené na udalostiach má vytvoriť funkcie, ktoré sa spustia pri spustení konkrétnych udalostí.

Pozrime sa na základný príklad definovania udalosti v Node.js.

Chystáme sa vytvoriť udalosť s názvom „data_received“. Po spustení tejto udalosti sa na konzolu odošle text „dáta prijaté“.

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

Vysvetlenie kódu: -

  1. Pomocou funkcie require zahrňte modul 'udalosti'. S týmto modulom budete môcť vytvárať udalosti v Node.js.
  2. Vytvorte nový vysielač udalostí. Toto sa používa na naviazanie udalosti, ktorá je v našom prípade „data_received“ na funkciu spätného volania, ktorá je definovaná v kroku 3.
  3. Definujeme funkciu riadenú udalosťami, ktorá hovorí, že ak sa v prípade spustenia udalosti „data_received“, mali by sme na konzolu odoslať text „data_received“.
  4. Nakoniec máme manuálny spúšťač našej udalosti pomocou funkcie eventEmiter.emit. To spustí udalosť data_received.

Po spustení programu sa na konzolu odošle text „dáta prijaté“, ako je to znázornené nižšie.

Vysielanie udalostí

Pri definovaní udalostí existujú rôzne metódy, ktoré možno vyvolať. Táto téma sa zameriava na podrobné preskúmanie každého z nich.

  1. Spracovatelia jednorazových udalostí

Niekedy by vás mohlo zaujímať, že chcete na udalosť zareagovať iba prvýkrát. V týchto situáciách môžete použiť metódu once ().

Pozrime sa, ako môžeme využiť metódu once na obsluhu udalostí.

Vysvetlenie kódu: -

  1. Tu používame metódu „raz“, aby sme povedali, že pre udalosť „data_received“ by sa funkcia spätného volania mala vykonať iba raz.
  2. Tu ručne spúšťame udalosť „data_received“.
  3. Po opätovnom spustení udalosti „data_received“ sa tentokrát nič nestane. Je to tak kvôli prvému kroku, v ktorom sme povedali, že udalosť sa mohla spustiť iba raz.

Ak je kód vykonaný správne, výstup v protokole bude 'data_received úspešne'. Táto správa sa v konzole zobrazí iba raz.

  1. Kontrola poslucháčov udalostí

V ktoromkoľvek okamihu svojej životnosti môže mať vysielač udalostí pripojený nula alebo viac poslucháčov. Poslucháčov pre každý typ udalosti je možné skontrolovať niekoľkými spôsobmi.

Ak vás zaujíma iba určenie počtu pripojených poslucháčov, nehľadajte nič iné ako metódu EventEmitter.listenerCount ().

( Poznámka: Poslucháči sú dôležití, pretože hlavný program by mal vedieť, či sú poslucháči pridávaní za behu na udalosť, inak bude program nefunkčný, pretože sa budú volať ďalší poslucháči.)

Vysvetlenie kódu: -

  1. Definujeme typ eventEmitter, ktorý je potrebný na použitie metód súvisiacich s udalosťami.
  2. Potom definujeme objekt s názvom emitor, ktorý sa použije na definovanie našich obslužných rutín udalostí.
  3. Vytvárame 2 obslužné rutiny udalostí, ktoré v podstate nič nerobia. Pre náš príklad je to stále jednoduché, len aby sme ukázali, ako funguje metóda listenerCount.
  4. Teraz, keď vyvoláte metódu listenerCount na našej udalosti data_received, odošle počet poslucháčov udalostí pripojených k tejto udalosti v denníku konzoly.

Ak je kód vykonaný správne, v protokole konzoly sa zobrazí hodnota 2.

  1. Nová udalosť Listener

Zakaždým, keď je zaregistrovaný nový obslužný program udalostí, vysielač udalostí emituje udalosť newListener. Táto udalosť sa používa na zistenie nových obslužných rutín udalostí. Udalosť newListener zvyčajne používate, keď potrebujete prideliť prostriedky alebo vykonať nejakú akciu pre každú novú obslužnú rutinu udalosti.

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

Vysvetlenie kódu: -

  1. Vytvárame nový obslužný program udalostí pre udalosť 'newListener'. Takže vždy, keď je zaregistrovaný nový obslužný program udalostí, v konzole sa zobrazí text „Added listener for“ + názov udalosti.
  2. Tu píšeme na konzolu text „Pridaný poslucháč pre“ + názov udalosti pre každú zaregistrovanú udalosť.
  3. Pre našu udalosť 'data_received' definujeme 2 obslužné rutiny udalostí.

Ak je vyššie uvedený kód vykonaný správne, v konzole sa zobrazí text uvedený nižšie. Iba ukazuje, že obslužná rutina udalosti „newListener“ bola spustená dvakrát.

Pridaný poslucháč pre udalosti prijaté_údajmi

Pridaný poslucháč pre udalosti prijaté_údajmi

Zhrnutie

  • Prúdy sa v Node.js používajú na čítanie a zápis údajov zo vstupno-výstupných zariadení. Node.js využíva knižnicu 'fs' na vytváranie čitateľných a zapisovateľných streamov do súborov. Tieto streamy sa dajú použiť na čítanie a zápis údajov zo súborov.
  • Na prepojenie viacerých prúdov je možné použiť potrubie. Jedným z najbežnejších príkladov je prepojenie toku čítania a zápisu na prenos údajov z jedného súboru do druhého.
  • Node.js je často tiež označovaný ako framework riadený udalosťami a je veľmi ľahké definovať udalosti v Node.js. Môžu byť definované funkcie, ktoré reagujú na tieto udalosti.
  • Udalosti tiež vystavujú metódy reagovania na kľúčové udalosti. Napríklad sme videli obslužnú rutinu udalosti once (), pomocou ktorej je možné zabezpečiť, aby sa funkcia spätného volania vykonala iba raz, keď sa spustí udalosť.