У овом упутству ћете научити
- Ток датотека у Ноде.јс
- Цеви у Ноде.јс
- Догађаји у Ноде.јс
- Емитујући догађаје
Ток датотека у Ноде.јс
Ноде широко користи токове као механизам за пренос података.
На пример, када на конзолу излазите било шта помоћу функције цонсоле.лог, заправо користите ток за слање података на конзолу.
Ноде.јс такође има могућност протока података из датотека како би се могли на одговарајући начин читати и писати. Сада ћемо погледати пример како можемо користити токове за читање и писање из датотека. За овај пример морамо следити доле наведене кораке
Корак 1) Направите датотеку под називом дата.ткт која садржи податке у наставку. Претпоставимо да је ова датотека ускладиштена на Д погону наше локалне машине.
Водич за Ноде.јс
Увод
Догађаји
Генератори
Дата Цоннецтивити
Користећи Јасмин
Корак 2) Напишите одговарајући код који ће користити стреамове за читање података из датотеке.
var fs = require("fs");var stream;stream = fs.createReadStream("D://data.txt");stream.on("data", function(data) {var chunk = data.toString();console.log(chunk);});
Објашњење кода: -
- Прво морамо да укључимо 'фс' модуле који садрже све функције потребне за креирање токова.
- Даље креирамо читљив ток користећи методу - цреатеРеадСтреам. Као улаз дајемо локацију наше датотеке дата.ткт.
- Функција стеам.он је руковатељ догађајима и у њој први параметар наводимо као „податак“. То значи да кад год подаци уђу у ток из датотеке, извршавају функцију повратног позива. У нашем случају дефинишемо функцију повратног позива која ће извршити 2 основна корака. Прва је претварање података прочитаних из датотеке у низ. Друга би била слање претвореног низа као излаза на конзолу.
- Узимамо сваки део података који се чита из тока података и претварамо га у низ.
- Коначно, шаљемо излаз сваког конвертованог низа у конзолу.
Излаз:
- Ако се код правилно изврши, у конзоли ћете видети горњи излаз. Овај излаз ће бити исти као онај у датотеци дата.ткт.
Писање у датотеку
На исти начин, како креирамо ток читања, можемо такође створити ток писања за писање података у датотеку. Направимо прво празну датотеку без садржаја која се зове дата.ткт. Претпоставимо да је ова датотека смештена у Д погон нашег рачунара.
Доњи код показује како можемо записати податке у датотеку.
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")
Објашњење кода: -
- Стварамо ток за писање помоћу методе - цреатеВритеСтреам. Као улаз дајемо локацију наше датотеке дата.ткт.
- Даље смо користили методу стреам.врите за писање различитих редова текста у нашу текстуалну датотеку. Стреам ће се побринути за уписивање ових података у датотеку дата.ткт.
Ако отворите датотеку дата.ткт, у датотеци ћете сада видети следеће податке
Водич за Ноде.јс
Увод
Догађаји
Генератори
Дата Цоннецтивити
Користећи Јасмин
Цеви у Ноде.јс
Унутар апликација Ноде, токови се могу спојити цевоводом помоћу методе пипе (), која узима два аргумента:
- Обавезан ток за писање који делује као одредиште података и
- Опционални објекат који се користи за прослеђивање опција.
Типичан пример употребе цеви ако желите да пренесете податке из једне датотеке у другу.
Па да видимо пример како можемо преносити податке из једне датотеке у другу помоћу цеви.
Корак 1) Направите датотеку названу датаинпут.ткт која садржи податке у наставку. Претпоставимо да је ова датотека ускладиштена на Д погону наше локалне машине.
Водич за Ноде.јс
Увод
Догађаји
Генератори
Дата Цоннецтивити
Користећи Јасмин
Корак 2) Направите празну празну датотеку названу датаОутпут.ткт и ставите је на Д диск ваше локалне машине.
Корак 3) Напишите доњи код да бисте извршили пренос података из датотеке датаинпут.ткт у датотеку датаОутпут.ткт.
var fs = require("fs");var readStream = fs.createReadStream("D://datainput.txt");var writeStream = fs.createWriteStream("D://dataOutput.txt");readStream.pipe(writeStream);
Објашњење кода: -
- Прво креирамо „ток читања“ за нашу датотеку датаинпут.ткт која садржи све наше податке које треба пренети у нову датотеку.
- Затим треба да креирамо „ток писања“ у нашу датотеку датаОутпут.ткт, која је наша празна датотека и одредиште је за пренос података из датотеке датаинпут.ткт.
- Затим користимо наредбу пипе за пренос података из читавог тока у ток писања. Наредба пипе ће узети све податке који долазе у ток читања и гурнути их у ток писања.
Ако сада отворите датотеку датаОутпут.ткт, видећете све податке који су били присутни у датотеци датаинпут.ткт.
Догађаји у Ноде.јс
Догађаји су један од кључних концепата у Ноде.јс, а понекад се Ноде.јс назива оквиром вођеним догађајима.
У основи, догађај је нешто што се дешава. На пример, ако се успостави веза са базом података, тада се покреће догађај везе с базом података. Програмирање вођено догађајима је стварање функција које ће се активирати када се покрену одређени догађаји.
Погледајмо основни пример дефинисања догађаја у Ноде.јс.
Направићемо догађај под називом „дата_рецеивед“. Када се овај догађај покрене, текст „примљени подаци“ биће послат на конзолу.
var events = require('events');var eventEmitter = new events.EventEmitter();eventEmitter.on('data_received', function() {console.log('data received succesfully.');});eventEmitter.emit('data_received');
Објашњење кода: -
- Користите функцију рекуире да бисте укључили модул 'догађаји'. Помоћу овог модула моћи ћете да креирате догађаје у Ноде.јс.
- Направите нови емитер догађаја. Ово се користи за везивање догађаја, који је у нашем случају "дата_рецеивед" за функцију повратног позива која је дефинисана у кораку 3.
- Дефинишемо функцију вођену догађајима која каже да ако у случају покретања догађаја "дата_рецеивед" тада треба да на конзолу изнесемо текст "дата_рецеивед".
- Коначно, имамо ручни окидач нашег догађаја помоћу функције евентЕмитер.емит. Ово ће покренути догађај дата_рецеивед.
Када се програм покрене, текст „примљени подаци“ биће послат на конзолу као што је приказано доле.
Емитујући догађаје
Приликом дефинисања догађаја постоје различите методе за догађаје на које се може позвати. Ова тема се фокусира на детаљно сагледавање сваког од њих.
- Једнократни руковаоци догађајима
Понекад би вас могло занимати да реагујете на догађај само први пут када се деси. У тим ситуацијама можете да користите методу Онце ().
Погледајмо како можемо да користимо методу Онце за руковаоце догађајима.
Објашњење кода: -
- Овде користимо методу „једном“ да бисмо рекли да се за догађај „дата_рецеивед“ функција повратног позива треба извршити само једном.
- Овде ручно покрећемо догађај 'дата_рецеивед'.
- Када се догађај „дата_рецеивед“ поново покрене, овог пута се ништа неће догодити. То је због првог корака у којем смо рекли да је догађај могао бити покренут само једном.
Ако се код изврши правилно, излаз у евиденцији биће „подаци_прихваћени успешно“. Ова порука ће се појавити само једном у конзоли.
- Инспекција слушалаца догађаја
У било ком тренутку свог живота, емитер догађаја може да има нула или више слушалаца везаних за њега. Слушаоци сваке врсте догађаја могу се прегледати на неколико начина.
Ако вас занима само одређивање броја прикључених слушалаца, не тражите даље од методе ЕвентЕмиттер.листенерЦоунт ().
( Напомена: Слушаоци су важни јер главни програм треба да зна да ли се слушаоци додају у ходу на неки догађај, иначе ће програм покварити јер ће бити позвани додатни слушаоци.)
Објашњење кода: -
- Ми дефинишемо тип евентЕмиттер који је потребан за употребу метода повезаних са догађајима.
- Затим дефинишемо објекат који се назива емитер и који ће се користити за дефинисање наших руковалаца догађајима.
- Стварамо 2 руковаоца догађајима који у основи не раде ништа. Ово је једноставно за наш пример само да би се показало како метода листенерЦоунт функционише.
- Сада када позовете методу листенерЦоунт на нашем догађају дата_рецеивед, он ће послати број слушалаца догађаја који су придружени овом догађају у дневнику конзоле.
Ако се код правилно изврши, вредност 2 ће бити приказана у дневнику конзоле.
- Догађај невЛистенер
Сваки пут када се региструје нови руковатељ догађајима, емитер догађаја емитује нови догађај Листенер. Овај догађај се користи за откривање нових руковалаца догађајима. Догађај невЛистенер обично користите када треба да доделите ресурсе или извршите неку радњу за сваки нови руковатељ догађајима.
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() {});
Објашњење кода: -
- Стварамо нови обрађивач догађаја за догађај 'невЛистенер'. Дакле, кад год се региструје нови руковатељ догађајима, у конзоли ће бити приказан текст „Додато слушало за“ + назив догађаја.
- Овде на конзолу записујемо текст „Додато слушало за“ + назив догађаја за сваки регистровани догађај.
- За наш догађај 'дата_рецеивед' дефинишемо 2 руковаоца догађајима.
Ако се горњи код правилно изврши, доњи текст ће бити приказан у конзоли. То само показује да је обрађивач догађаја 'невЛистенер' покренут два пута.
Додан је слушалац за догађаје који су примљени у податке
Додан је слушалац за догађаје који су примљени у податке
Резиме
- Потоци се користе у Ноде.јс за читање и писање података са улазно-излазних уређаја. Ноде.јс користи библиотеку 'фс' за стварање читљивих и записљивих токова датотека. Ови токови се могу користити за читање и писање података из датотека.
- Цеви се могу користити за повезивање више токова заједно. Један од најчешћих примера је повезивање тока читања и писања за пренос података из једне датотеке у другу.
- Ноде.јс је често такође означен као оквир вођен догађајима и врло је лако дефинисати догађаје у Ноде.јс. Могу се дефинисати функције које одговарају на ове догађаје.
- Догађаји такође излажу методе за одговор на кључне догађаје. На пример, видели смо обрађивач догађаја Онце () који се може користити да би се осигурало да се функција повратног позива извршава само једном када се догађај покрене.