Підручник з потоків js для вузла: Потік файлів, Труби

Зміст:

Anonim

У цьому підручнику ви дізнаєтесь

  • Потік файлів у Node.js
  • Труби в Node.js
  • Події в Node.js
  • Випромінювання подій

Потік файлів у Node.js

Вузол широко використовує потоки як механізм передачі даних.

Наприклад, коли ви виводите що-небудь на консоль за допомогою функції 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. Тут ми використовуємо метод 'Once', щоб сказати, що для події '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

Щоразу, коли реєструється новий обробник подій, випромінювач подій видає подію newListener. Ця подія використовується для виявлення нових обробників подій. Зазвичай ви використовуєте подію 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 (), за допомогою якого можна переконатися, що функція зворотного виклику виконується лише один раз, коли спрацьовує подія.