Node js Потоци Урок: Filestream, Pipes

Съдържание:

Anonim

В този урок ще научите

  • Файлов поток в Node.js
  • Тръби в Node.js
  • Събития в Node.js
  • Излъчване на събития

Файлов поток в Node.js

Node широко използва потоците като механизъм за пренос на данни.

Например, когато извеждате каквото и да е към конзолата с помощта на функцията console.log, всъщност използвате поток за изпращане на данните към конзолата.

Node.js също има способността да предава данни от файлове, така че те да могат да се четат и пишат по подходящ начин. Сега ще разгледаме пример за това как можем да използваме потоци за четене и писане от файлове. Трябва да следваме посочените по-долу стъпки за този пример

Стъпка 1) Създайте файл, наречен data.txt, който съдържа данните по-долу. Нека приемем, че този файл се съхранява на D устройството на нашата локална машина.

Урок за Node.js

Въведение

Събития

Генератори

Свързване на данни

Използване на жасмин

Стъпка 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);});

Обяснение на кода: -

  1. Първо трябва да включим модулите 'fs', които съдържат цялата функционалност, необходима за създаване на потоци.
  2. След това създаваме четим поток с помощта на метода - createReadStream. Като вход даваме местоположението на нашия файл data.txt.
  3. Функцията steam.on е манипулатор на събития и в нея ние посочваме първия параметър като „данни“. Това означава, че когато данните идват в потока от файла, изпълнете функция за обратно извикване. В нашия случай дефинираме функция за обратно извикване, която ще извърши 2 основни стъпки. Първият е да преобразувате данните, прочетени от файла, като низ. Второто би било изпращането на преобразувания низ като изход към конзолата.
  4. Вземаме всяка част от данните, които се четат от потока от данни, и ги преобразуваме в низ.
  5. И накрая, ние изпращаме изхода на всеки преобразуван низ в конзолата.

Изход:

  • Ако кодът се изпълни правилно, ще видите горния изход в конзолата. Този изход ще бъде същият като този във файла data.txt.

Записване във файл

По същия начин, по който създаваме поток за четене, можем да създадем и поток за запис, за да записваме данни във файл. Нека първо създадем празен файл без съдържание, наречено data.txt. Да приемем, че този файл е поставен в D устройството на нашия компютър.

Кодът по-долу показва как можем да запишем данни във файла.

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. Ние създаваме записваем поток с помощта на метода - createWriteStream. Като вход даваме местоположението на нашия файл data.txt.
  2. След това използвахме метод stream.write, за да напишем различните редове текст в нашия текстов файл. Потокът ще се погрижи за записването на тези данни във файла data.txt.

Ако отворите файла data.txt, сега ще видите следните данни във файла

Урок за Node.js

Въведение

Събития

Генератори

Свързване на данни

Използване на жасмин

Тръби в Node.js

В приложенията на Node потоците могат да се свържат заедно чрез метода pipe (), който взема два аргумента:

  • Задължителен записваем поток, който действа като дестинация за данните и
  • Незадължителен обект, използван за предаване на опции.

Типичен пример за използване на тръби, ако искате да прехвърлите данни от един файл в другия.

Така че нека да видим пример за това как можем да прехвърляме данни от един файл в другия с помощта на тръби.

Стъпка 1) Създайте файл, наречен datainput.txt, който съдържа данните по-долу. Нека приемем, че този файл се съхранява на D устройството на нашата локална машина.

Урок за Node.js

Въведение

Събития

Генератори

Свързване на данни

Използване на жасмин

Стъпка 2) Създайте празен празен файл, наречен dataOutput.txt, и го поставете на D устройството на вашата локална машина.

Стъпка 3) Напишете кода по-долу, за да извършите прехвърлянето на данни от файла datainput.txt към файла dataOutput.txt.

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

Обяснение на кода: -

  1. Първо създаваме „поток за четене“ към нашия файл datainput.txt, който съдържа всички наши данни, които трябва да бъдат прехвърлени в новия файл.
  2. След това трябва да създадем „поток за запис“ към нашия файл dataOutput.txt, който е нашият празен файл и е дестинацията за прехвърляне на данни от файла datainput.txt.
  3. След това използваме командата pipe, за да прехвърлим данните от потока за четене към потока за запис. Командата pipe ще вземе всички данни, които влизат в потока за четене, и ще ги изпрати към потока за запис.

Ако сега отворите файла dataOutput.txt, ще видите всички данни, които са присъствали във файла datainput.txt.

Събития в Node.js

Събитията са една от ключовите концепции в Node.js, а понякога Node.js се нарича структура, управлявана от събития.

По принцип събитието е нещо, което се случва. Например, ако се установи връзка с база данни, тогава се задейства събитието за връзка с базата данни. Програмирането, управлявано от събития, е да се създадат функции, които ще се задействат, когато се задействат конкретни събития.

Нека разгледаме основен пример за дефиниране на събитие в Node.js.

Ще създадем събитие, наречено „data_received“. Когато това събитие се задейства, текстът "получени данни" ще бъде изпратен на конзолата.

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

Обяснение на кода: -

  1. Използвайте функцията require, за да включите модула „събития“. С този модул ще можете да създавате събития в Node.js.
  2. Създайте нов излъчвател на събития. Това се използва за обвързване на събитието, което в нашия случай е "data_received" към функция за обратно извикване, която е дефинирана в стъпка 3.
  3. Дефинираме функция, управлявана от събития, която казва, че ако в случай, че събитието "data_received" се задейства, трябва да изведем текста "data_received" към конзолата.
  4. И накрая, ние имаме ръчен спусък на нашето събитие, използвайки функцията eventEmiter.emit. Това ще задейства събитието data_received.

Когато програмата се изпълни, текстът "получени данни" ще бъде изпратен на конзолата, както е показано по-долу.

Излъчване на събития

При дефиниране на събития има различни методи за събития, които могат да бъдат извикани. Тази тема се фокусира върху разглеждането на всеки един от тях в детайли.

  1. Еднократни манипулатори на събития

Понякога може да ви е интересно да реагирате на събитие само първия път, когато то се случи. В тези ситуации можете да използвате метода Once ().

Нека да видим как можем да използваме метода Once за манипулатори на събития.

Обяснение на кода: -

  1. Тук използваме метода „веднъж“, за да кажем, че за събитието „data_received“ функцията за обратно извикване трябва да бъде изпълнена само веднъж.
  2. Тук ръчно задействаме събитието „data_received“.
  3. Когато събитието „data_received“ се задейства отново, този път нищо няма да се случи. Това е заради първата стъпка, при която казахме, че събитието може да се задейства само веднъж.

Ако кодът се изпълни правилно, изходът в дневника ще бъде „data_received успешно“. Това съобщение ще се появи само веднъж в конзолата.

  1. Проверка на слушателите на събития

Във всеки момент от живота си излъчвателят на събития може да има нула или повече слушатели, прикрепени към него. Слушателите за всеки тип събитие могат да бъдат проверени по няколко начина.

Ако се интересувате само от определяне на броя на прикачените слушатели, не търсете повече от метода EventEmitter.listenerCount ().

( Забележка: Слушателите са важни, защото основната програма трябва да знае дали слушателите се добавят в движение към събитие, в противен случай програмата ще се повреди, тъй като ще бъдат извикани допълнителни слушатели.)

Обяснение на кода: -

  1. Определяме тип eventEmitter, който е необходим за използване на свързаните със събитията методи.
  2. След това дефинираме обект, наречен емитер, който ще се използва за дефиниране на нашите манипулатори на събития.
  3. Създаваме 2 манипулатора на събития, които по принцип не правят нищо. Това е лесно за нашия пример, само за да покажем как работи методът listenerCount.
  4. Сега, когато извикате метода listenerCount в нашето събитие data_received, той ще изпрати броя на слушателите на събития, прикрепени към това събитие в конзолния дневник.

Ако кодът се изпълни правилно, стойността 2 ще бъде показана в конзолния дневник.

  1. Събитието newListener

Всеки път, когато се регистрира нов манипулатор на събития, излъчвателят на събития излъчва ново събитие на Listener. Това събитие се използва за откриване на нови манипулатори на събития. Обикновено използвате събитие newListener, когато трябва да разпределите ресурси или да извършите някакво действие за всеки нов манипулатор на събития.

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

Обяснение на кода: -

  1. Създаваме нов манипулатор на събития за събитието 'newListener'. Така че всеки път, когато се регистрира нов манипулатор на събития, в конзолата ще се покаже текстът "Добавен слушател за" + името на събитието.
  2. Тук пишем в конзолата текста "Добавен слушател за" + името на събитието за всяко регистрирано събитие.
  3. Определяме 2 манипулатора на събития за нашето събитие 'data_received'.

Ако горният код се изпълни правилно, текстът по-долу ще се покаже в конзолата. Това просто показва, че манипулаторът на събития 'newListener' е бил задействан два пъти.

Добавен слушател за събития, получени от данни

Добавен слушател за събития, получени от данни

Обобщение

  • Потоците се използват в Node.js за четене и запис на данни от входно-изходни устройства. Node.js използва библиотеката 'fs' за създаване на четими и записваеми потоци във файлове. Тези потоци могат да се използват за четене и запис на данни от файлове.
  • Тръбите могат да се използват за свързване на множество потоци заедно. Един от най-често срещаните примери е да се свърже потока за четене и запис заедно за прехвърляне на данни от един файл в другия.
  • Node.js често се маркира и като рамка, управлявана от събития, и е много лесно да се дефинират събития в Node.js. Могат да бъдат дефинирани функции, които отговарят на тези събития.
  • Събитията също така излагат методи за реагиране на ключови събития. Например, видяхме манипулатора на събитие Once (), който може да се използва, за да се увери, че функцията за обратно извикване се изпълнява само веднъж, когато се задейства събитие.