Vadnica za pretakanje vozlišč js: Filestream, Pipes

Kazalo:

Anonim

V tej vadnici boste izvedeli

  • Tok datotek v Node.js
  • Cevi v Node.js
  • Dogodki v Node.js
  • Oddajanje dogodkov

Tok datotek v Node.js

Node široko uporablja tokove kot mehanizem za prenos podatkov.

Na primer, ko na konzolo s pomočjo funkcije console.log oddate kar koli, dejansko uporabljate tok za pošiljanje podatkov na konzolo.

Node.js ima tudi možnost pretoka podatkov iz datotek, tako da jih je mogoče ustrezno prebrati in zapisati. Zdaj si bomo ogledali primer, kako lahko uporabljamo tokove za branje in pisanje iz datotek. Za ta primer moramo slediti spodnjim korakom

Korak 1) Ustvarite datoteko z imenom data.txt, ki vsebuje spodnje podatke. Recimo, da je ta datoteka shranjena na pogonu D našega lokalnega računalnika.

Vadnica za Node.js

Uvod

Dogodki

Generatorji

Podatkovna povezljivost

Uporaba jasmina

Korak 2) Napišite ustrezno kodo, ki bo uporabila tokove za branje podatkov iz datoteke.

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

Pojasnilo kode: -

  1. Najprej moramo vključiti module 'fs', ki vsebujejo vse funkcije, potrebne za ustvarjanje tokov.
  2. Nato z uporabo metode - createReadStream ustvarimo berljiv tok. Kot vhod podajamo lokacijo naše datoteke data.txt.
  3. Funkcija steam.on je obdelovalec dogodkov in v njej prvi parameter določimo kot 'podatki'. To pomeni, da vsakič, ko pridejo podatki v tok iz datoteke, nato izvedite funkcijo povratnega klica. V našem primeru definiramo funkcijo povratnega klica, ki bo izvedla 2 osnovna koraka. Prva je pretvorba podatkov, prebranih iz datoteke, v niz. Drugi bi bil pretvorjeni niz poslati kot izhod v konzolo.
  4. Vsak del podatkov, ki ga preberemo iz podatkovnega toka, vzamemo in pretvorimo v niz.
  5. Na koncu pošljemo izhodne podatke vsakega pretvorjenega niza v konzolo.

Izhod:

  • Če je koda pravilno izvedena, boste v konzoli videli zgornji izhod. Ta izhod bo enak tistemu v datoteki data.txt.

Zapis v datoteko

Na enak način, kot ustvarimo tok branja, lahko ustvarimo tudi tok pisanja za zapisovanje podatkov v datoteko. Najprej ustvarimo prazno datoteko brez vsebine, imenovano data.txt. Predpostavimo, da je ta datoteka nameščena v pogonu D našega računalnika.

Spodnja koda prikazuje, kako lahko v datoteko zapišemo podatke.

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

Pojasnilo kode: -

  1. Ustvarjamo zapisljiv tok z uporabo metode - createWriteStream. Kot vhod podajamo lokacijo naše datoteke data.txt.
  2. Nato smo uporabili metodo stream.write za zapisovanje različnih vrstic besedila v našo besedilno datoteko. Tok bo poskrbel za zapis teh podatkov v datoteko data.txt.

Če odprete datoteko data.txt, boste v njej videli naslednje podatke

Vadnica za Node.js

Uvod

Dogodki

Generatorji

Podatkovna povezljivost

Uporaba jasmina

Cevi v Node.js

Znotraj aplikacij Node lahko tokove povežemo skupaj z metodo pipe (), ki ima dva argumenta:

  • Zahtevan zapisljiv tok, ki deluje kot cilj za podatke in
  • Izbirni objekt, ki se uporablja za posredovanje možnosti.

Tipičen primer uporabe cevi, če želite podatke prenesti iz ene datoteke v drugo.

Poglejmo torej primer, kako lahko s pomočjo cevi prenesemo podatke iz ene datoteke v drugo.

Korak 1) Ustvarite datoteko z imenom datainput.txt, ki vsebuje spodnje podatke. Recimo, da je ta datoteka shranjena na pogonu D našega lokalnega računalnika.

Vadnica za Node.js

Uvod

Dogodki

Generatorji

Podatkovna povezljivost

Uporaba jasmina

Korak 2) Ustvarite prazno prazno datoteko z imenom dataOutput.txt in jo postavite na pogon D vašega lokalnega računalnika.

Korak 3) Za prenos podatkov iz datoteke datainput.txt v datoteko dataOutput.txt napišite spodnjo kodo.

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

Pojasnilo kode: -

  1. Najprej ustvarimo "tok branja" za našo datoteko datainput.txt, ki vsebuje vse naše podatke, ki jih je treba prenesti v novo datoteko.
  2. Nato moramo ustvariti "tok pisanja" v našo datoteko dataOutput.txt, ki je naša prazna datoteka in je cilj za prenos podatkov iz datoteke datainput.txt.
  3. Nato z ukazom pipe prenesemo podatke iz bralnega toka v tok pisanja. Ukaz pipe bo vzel vse podatke, ki pridejo v tok branja, in jih potisnil v tok pisanja.

Če zdaj odprete datoteko dataOutput.txt, boste videli vse podatke, ki so bili prisotni v datoteki datainput.txt.

Dogodki v Node.js

Dogodki so eden ključnih konceptov v Node.js, včasih pa Node.js imenujejo ogrodje, ki ga vodijo dogodki.

V bistvu je dogodek nekaj, kar se zgodi. Če je na primer vzpostavljena povezava z bazo podatkov, se sproži dogodek povezave z bazo podatkov. Programiranje na podlagi dogodkov je ustvariti funkcije, ki se bodo sprožile, ko se sprožijo določeni dogodki.

Oglejmo si osnovni primer definiranja dogodka v Node.js.

Ustvarili bomo dogodek, imenovan 'data_received'. Ko se ta dogodek sproži, se na konzolo pošlje besedilo "prejeti podatki".

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

Pojasnilo kode: -

  1. Uporabite funkcijo require, da vključite modul 'dogodki'. S tem modulom boste lahko ustvarjali dogodke v Node.js.
  2. Ustvarite nov oddajnik dogodkov. S tem se dogodek, ki je v našem primeru "data_received", veže na funkcijo povratnega klica, ki je definirana v koraku 3.
  3. Določimo funkcijo na podlagi dogodkov, ki pravi, da v primeru, da se sproži dogodek "data_received", moramo na konzolo izpisati besedilo "data_received".
  4. Na koncu imamo še ročni sprožilec našega dogodka s pomočjo funkcije eventEmiter.emit. To bo sprožilo dogodek data_received.

Ko se program zažene, bo besedilo "prejeti podatki" poslano na konzolo, kot je prikazano spodaj.

Oddajanje dogodkov

Pri določanju dogodkov obstajajo različne metode za dogodke, ki jih je mogoče priklicati. Ta tema se osredotoča na podroben ogled vsakega od njih.

  1. Enkratni vodniki dogodkov

Včasih vas morda zanima odziv na dogodek šele, ko se zgodi. V teh primerih lahko uporabite metodo Once ().

Poglejmo, kako lahko uporabimo metodo Once za obdelavo dogodkov.

Pojasnilo kode: -

  1. Tu uporabljamo metodo "enkrat", da rečemo, da je treba za dogodek "data_received" funkcijo povratnega klica izvršiti samo enkrat.
  2. Tu ročno sprožimo dogodek 'data_received'.
  3. Ko se znova sproži dogodek 'data_received', se tokrat ne bo zgodilo nič. To je zaradi prvega koraka, pri katerem smo rekli, da je dogodek mogoče sprožiti samo enkrat.

Če je koda pravilno izvedena, bo izhod v dnevniku »data_received успешно«. To sporočilo bo v konzoli prikazano samo enkrat.

  1. Pregledovanje poslušalcev dogodkov

Oddajnik dogodka ima lahko kadar koli v življenju nič ali več poslušalcev. Poslušalce za vsako vrsto dogodka je mogoče pregledati na več načinov.

Če vas zanima samo določitev števila priloženih poslušalcev, potem ne glejte dlje od metode EventEmitter.listenerCount ().

( Opomba: Poslušalci so pomembni, ker mora glavni program vedeti, ali so poslušalci dodani na trenutek dogodku, sicer bo program okvarjen, ker bodo poklicani dodatni poslušalci.)

Pojasnilo kode: -

  1. Določamo vrsto eventEmitter, ki je potrebna za uporabo metod, povezanih z dogodki.
  2. Nato definiramo objekt, imenovan oddajnik, ki bo uporabljen za definiranje naših obravnavalcev dogodkov.
  3. Ustvarjamo dva vodnika dogodkov, ki v bistvu ne naredita ničesar. Za naš primer je to preprosto, samo da pokažemo, kako deluje metoda listenerCount.
  4. Zdaj, ko na našem dogodku data_received prikličete metodo listenerCount, bo v dnevniku konzole poslala število poslušalcev dogodkov, ki so priloženi temu dogodku.

Če je koda pravilno izvedena, bo vrednost 2 prikazana v dnevniku konzole.

  1. Dogodek newListener

Vsakič, ko je registriran nov vodnik dogodkov, oddajalec dogodka odda dogodek newListener. Ta dogodek se uporablja za zaznavanje novih upravljavcev dogodkov. Dogodek newListener običajno uporabite, ko morate dodeliti vire ali izvesti nekaj dejanj za vsak nov obdelovalec dogodkov.

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

Pojasnilo kode: -

  1. Ustvarjamo nov vodnik dogodkov za dogodek 'newListener'. Torej, kadar koli je registriran nov obdelovalec dogodkov, bo v konzoli prikazano besedilo "Dodani poslušalec za" + ime dogodka.
  2. Tu pišemo na konzolo besedilo "Dodan poslušalec za" + ime dogodka za vsak registriran dogodek.
  3. Za naš dogodek 'data_received' definiramo 2 obdelovalca dogodkov.

Če je zgornja koda pravilno izvedena, bo v konzoli prikazano spodnje besedilo. To samo kaže, da je bil vodnik dogodka 'newListener' sprožen dvakrat.

Dodan poslušalec za dogodke data_received

Dodan poslušalec za dogodke data_received

Povzetek

  • Potoki se v Node.js uporabljajo za branje in zapisovanje podatkov iz vhodno-izhodnih naprav. Node.js uporablja knjižnico 'fs' za ustvarjanje berljivih in zapisljivih tokov datotek. Te tokove lahko uporabljate za branje in pisanje podatkov iz datotek.
  • Cevi se lahko uporabljajo za povezovanje več tokov skupaj. Eden najpogostejših primerov je povezovanje toka branja in pisanja za prenos podatkov iz ene datoteke v drugo.
  • Node.js je pogosto označen tudi kot okvir, ki ga vodijo dogodki, in v Node.js je zelo enostavno definirati dogodke. Določiti je mogoče funkcije, ki se odzivajo na te dogodke.
  • Dogodki izpostavljajo tudi metode odzivanja na ključne dogodke. Na primer, videli smo obdelovalec dogodkov Once (), s katerim lahko zagotovimo, da se funkcija povratnega klica izvede samo enkrat, ko se dogodek sproži.