Node js Streamsi õpetus: failivoog, torud
Failivoog rakenduses Node.js
Node kasutab andmeedastusmehhanismina laialdaselt vooge.
Näiteks kui väljastate midagi konsooli funktsiooni console.log abil, kasutate andmete konsooli saatmiseks tegelikult voogu.
Node.js-l on ka võimalus failidest andmeid voogesitada, et neid saaks õigesti lugeda ja kirjutada. Vaatame nüüd näidet selle kohta, kuidas saame failidest lugemiseks ja kirjutamiseks kasutada vooge. Peame selle näite jaoks järgima alltoodud samme
Step 1) Looge fail nimega data.txt, mis sisaldab allolevaid andmeid. Oletame, et see fail on salvestatud meie kohaliku masina D-draivile.
Node.js-i õpetus
Sissejuhatus
Sündmused
Andmeside
Jasmiini kasutamine
Step 2) Kirjutage asjakohane kood, mis kasutab failist andmete lugemiseks vooge.
var fs = require("fs"); var stream; stream = fs.createReadStream("D://data.txt"); stream.on("data", function(data) { var chunk = data.toString(); console.log(chunk); });
Koodi selgitus: -
- Kõigepealt peame kaasama fs-moodulid, mis sisaldavad kõiki voogude loomiseks vajalikke funktsioone.
- Järgmisena loome loetava voo, kasutades meetodit createReadStream. Sisendina anname faili data.txt asukoha.
- Funktsioon steam.on on sündmuste töötleja ja selles määrame esimese parameetri kui "andmed". See tähendab, et kui failist voogu tulevad andmed, käivitage tagasihelistamise funktsioon. Meie puhul määratleme tagasihelistamisfunktsiooni, mis viib läbi 2 põhietappi. Esimene on failist loetud andmete teisendamine stringina. Teine oleks teisendatud stringi saatmine väljundina konsooli.
- Võtame iga andmevoost loetava andmepaki ja teisendame selle stringiks.
- Lõpuks saadame iga stringi teisendatud tüki väljundi konsooli.
Väljund:
- Kui kood on õigesti käivitatud, näete konsoolis ülaltoodud väljundit. See väljund on sama, mis failis data.txt.
Faili kirjutamine
Samamoodi, kui loome lugemisvoo, saame luua ka kirjutamisvoo andmete faili kirjutamiseks. Loome esmalt tühja faili nimega data.txt. Oletame, et see fail on paigutatud meie arvuti D-draivi.
Allolev kood näitab, kuidas saame faili andmeid kirjutada.
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")
Koodi selgitus: -
- Loome kirjutatava voo, kasutades meetodit createWriteStream. Sisendina anname faili data.txt asukoha.
- Järgmisena kasutasime meetodit stream.write erinevate tekstiridade kirjutamiseks meie tekstifaili. Voog kirjutab nende andmete faili data.txt.
Kui avate faili data.txt, näete nüüd failis järgmisi andmeid
Node.js-i õpetus
Sissejuhatus
Sündmused
Generators
Andmeside
Kasutamine jasmiin
Torud failis Node.js
Node rakendustes saab vooge ühendada pipe() meetodi abil, millel on kaks argumenti:
- Nõutav kirjutatav voog, mis toimib andmete ja
- Valikuline objekt, mida kasutatakse valikute sisestamiseks.
Tüüpiline näide torude kasutamisest, kui soovite andmeid ühest failist teise üle kanda.
Vaatame siis näidet, kuidas saame torude abil andmeid ühest failist teise üle kanda.
Step 1) Looge fail nimega datainput.txt, mis sisaldab allolevaid andmeid. Oletame, et see fail on salvestatud meie kohaliku masina D-draivile.
Node.js-i õpetus
Sissejuhatus
Sündmused
Generators
Andmeside
Jasmiini kasutamine
Step 2) Looge tühi tühi fail nimega dataOutput.txt ja asetage see oma kohaliku masina D-kettale.
Step 3) Kirjutage allolev kood andmete edastamiseks failist datainput.txt faili dataOutput.txt.
var fs = require("fs"); var readStream = fs.createReadStream("D://datainput.txt"); var writeStream = fs.createWriteStream("D://dataOutput.txt"); readStream.pipe(writeStream);
Koodi selgitus: -
- Esmalt loome oma datainput.txt failile lugemisvoo, mis sisaldab kõiki meie andmeid, mis tuleb uude faili üle kanda.
- Seejärel peame oma failile dataOutput.txt looma "kirjutusvoo", mis on meie tühi fail ja mis on failist datainput.txt andmete edastamise sihtkoht.
- Seejärel kasutame käsku toru, et edastada andmed lugemisvoost kirjutamisvoogu. Torukäsk võtab kõik lugemisvoogu saabuvad andmed ja suunab need kirjutusvoogu.
Kui avate nüüd faili dataOutput.txt, näete kõiki andmeid, mis olid failis datainput.txt.
Sündmused rakenduses Node.js
Sündmused on üks Node.js-i põhimõisteid ja mõnikord nimetatakse Node.js-i sündmustepõhiseks raamistikuks.
Põhimõtteliselt on sündmus midagi, mis juhtub. Näiteks kui luuakse ühendus andmebaasiga, siis käivitatakse andmebaasiühenduse sündmus. Sündmuspõhise programmeerimise eesmärk on luua funktsioone, mis käivituvad konkreetsete sündmuste käivitamisel.
Vaatame põhinäidet sündmuse määratlemiseks failis Node.js.
Loome sündmuse nimega 'data_received'. Kui see sündmus käivitatakse, saadetakse konsooli tekst "andmed vastu võetud".
var events = require('events'); var eventEmitter = new events.EventEmitter(); eventEmitter.on('data_received', function() { console.log('data received succesfully.'); }); eventEmitter.emit('data_received');
Koodi selgitus: -
- Sündmuste mooduli kaasamiseks kasutage funktsiooni Nõua. Selle mooduli abil saate luua Node.js-is sündmusi.
- Looge uus sündmuste saatja. Seda kasutatakse sündmuse sidumiseks, mis meie puhul on "data_received" tagasihelistamisfunktsiooniga, mis on määratletud etapis 3.
- Määratleme sündmusepõhise funktsiooni, mis ütleb, et kui sündmus "data_received" käivitatakse, peaksime konsooli väljastama teksti "data_received".
- Lõpuks on meil oma sündmuse käsitsi käivitamine, kasutades funktsiooni eventEmiter.emit. See käivitab sündmuse data_received.
Programmi käivitamisel saadetakse konsooli tekst "andmed vastu võetud", nagu allpool näidatud.
Sündmuste väljastamine
Sündmuste määratlemisel on sündmuste jaoks erinevad meetodid, mida saab kutsuda. See teema keskendub igaühe üksikasjalikule vaatamisele.
- Ühekordsed sündmuste käsitlejad
Mõnikord võite olla huvitatud sündmusele reageerimisest alles siis, kui see toimub. Sellistes olukordades saate kasutada üks kord () meetodit.
Vaatame, kuidas saame sündmuste käitlejate jaoks ühekordset meetodit kasutada.
Koodi selgitus: -
- Siin kasutame meetodit "once", et öelda, et sündmuse "data_received" puhul tuleks tagasihelistamise funktsiooni käivitada ainult üks kord.
- Siin käivitame käsitsi sündmuse 'data_received'.
- Kui sündmus 'data_received' uuesti käivitatakse, ei juhtu seekord midagi. Selle põhjuseks on esimene samm, kus me ütlesime, et sündmust saab käivitada ainult üks kord.
Kui kood on õigesti käivitatud, on logi väljundiks 'data_received edukalt'. See teade kuvatakse konsoolis ainult üks kord.
- Sündmuste kuulajate kontrollimine
Sündmuse emitteril võib igal ajal oma eluea jooksul olla null või enam kuulajat. Iga sündmuse tüübi kuulajaid saab kontrollida mitmel viisil.
Kui teid huvitab ainult lisatud kuulajate arvu määramine, siis ärge vaadake kaugemale kui meetod EventEmitter.listenerCount().
(Märge: Kuulajad on olulised, sest põhiprogramm peaks teadma, kas sündmusele lisatakse kuulajaid käigu pealt, vastasel juhul tekib programmis tõrkeid, kuna helistatakse lisakuulajatele.)
Koodi selgitus: -
- Me defineerime eventEmitteri tüübi, mis on vajalik sündmustega seotud meetodite kasutamiseks.
- Seejärel määratleme objekti nimega emitter, mida kasutatakse sündmuste käitlejate määratlemiseks.
- Loome 2 sündmuste käitlejat, mis põhimõtteliselt ei tee midagi. See on meie näite jaoks lihtne, et näidata, kuidas kuularCount meetod töötab.
- Nüüd, kui käivitate meie sündmuse data_received meetodi listenerCount, saadab see konsooli logis sellele sündmusele lisatud sündmuste kuulajate arvu.
Kui kood on õigesti käivitatud, kuvatakse konsooli logis väärtus 2.
- Uus kuulaja sündmus
Iga kord, kui registreeritakse uus sündmuste käitleja, väljastab sündmuse saatja uue kuulaja sündmuse. Seda sündmust kasutatakse uute sündmuste töötlejate tuvastamiseks. Tavaliselt kasutate newListeneri sündmust siis, kui peate eraldama ressursse või sooritama mõne toimingu iga uue sündmusekäsitleja jaoks.
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() {});
Koodi selgitus: -
- Loome sündmuse "newListener" jaoks uut sündmuste töötlejat. Nii et iga kord, kui registreeritakse uus sündmuste töötleja, kuvatakse konsoolis tekst "Lisatud kuulaja" + sündmuse nimi.
- Siin kirjutame konsooli teksti "Lisatud kuulaja" + sündmuse nime iga registreeritud sündmuse kohta.
- Määratleme oma sündmusele 'data_received' kaks sündmuste töötlejat.
Kui ülaltoodud kood on õigesti käivitatud, kuvatakse konsoolis allolev tekst. See näitab lihtsalt, et 'newListener' sündmuste käitleja käivitati kaks korda.
Data_received sündmuste kuulaja on lisatud
Data_received sündmuste kuulaja on lisatud
kokkuvõte
- Vooge kasutatakse rakenduses Node.js, et lugeda ja kirjutada andmeid sisend-väljundseadmetest. Node.js kasutab "fs" teeki, et luua failidele loetavaid ja kirjutatavaid vooge. Neid vooge saab kasutada failidest andmete lugemiseks ja kirjutamiseks.
- Torusid saab kasutada mitme voolu ühendamiseks. Üks levinumaid näiteid on lugemis- ja kirjutamisvoo ühendamine andmete ühest failist teise ülekandmiseks.
- Node.js märgitakse sageli ka sündmusepõhise raamistikuna ja Node.js-is on sündmusi väga lihtne määratleda. Nendele sündmustele reageerivaid funktsioone saab määratleda.
- Sündmused paljastavad ka võtmesündmustele reageerimise meetodid. Näiteks oleme näinud sündmuste käitlejat Once(), mida saab kasutada tagamaks, et tagasihelistamisfunktsiooni käivitatakse sündmuse käivitamisel ainult üks kord.