ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Преобразование строки в поток в Node.js для ya-csv

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования строки в поток в Node.js, используйте метод Readable.from:

JS
Скопировать код
const { Readable } = require('stream');

const myStream = Readable.from('Привет, мир!');
myStream.on('data', (chunk) => {
  console.log(chunk.toString()); // Вывод: Привет, мир!
});

Метод Readable.from позволяет преобразовать строку в поток без лишних трудностей.

Если ваши проекты основаны на версиях Node.js ранее 12.x, создайте поток самостоятельно с помощью класса Readable:

JS
Скопировать код
const stringToStream = (str) => {
  const stream = new Readable({
    read() {}
  });
  stream.push(str);
  stream.push(null);
  return stream;
};

const myStream = stringToStream('Привет, мир!');
myStream.on('data', (chunk) => {
  console.log(chunk.toString()); // Результат: Привет, мир!
});

В конструктор класса Readable следует передать функцию _read, даже если она пустая и не выполняет никаких действий.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Визуализация

Вообразите создание потока из строки в Node.js как переливание воды из стакана в шланг для полива:

Строка: "Привет, мир!"  // 🥛
Поток: инициируем поток  // 🌊 ➜ 🌱

В результате преобразования:

JS
Скопировать код
const stringStream = Readable.from("Привет, мир!");

Ваша строка становится потоком, который способствует росту и расцвету планеты:

Поток Readable: 🥛➡️🌊➡️🌱

Каждый символ строки последовательно проходит через поток:

П ➡️ р ➡️ и ➡️ в ➡️ е ➡️ т ➡️ , ➡️   ➡️ м ➡️ и ➡️ р ➡️ !

Это как каждая капля воды, потоком плывущая в ручье.

Запустим это правильно

Простейший способ с PassThrough

Альтернативный подход – это использование класса PassThrough:

JS
Скопировать код
const { PassThrough } = require('stream');

const stringToStream = (str) => {
  const passThrough = new PassThrough();
  passThrough.write(str);
  passThrough.end();
  return passThrough;
};

const myStream = stringToStream('Привет, мир!');
myStream.pipe(process.stdout); // Всё работает!

PassThrough создаёт читаемый поток без сложных настроек.

Слушаем событие data в потоке

При работе с потоками важно подписаться на событие 'data':

JS
Скопировать код
myStream.on('data', (chunk) => {
  process.stdout.write(chunk.toString());
});

Обработка события 'data' гарантирует своевременную обработку каждого блока данных.

Используем pipe для усиления производительности потока

Для непрерывной передачи данных используйте pipe:

JS
Скопировать код
myStream.pipe(someWritableStream);

Метод pipe эффективно оптимизирует передачу данных, идеально подходя для записи в файлы, отправки данных по сети или коммуницирования с другими потоками.

Проверяем перед передачей

Перед передачей убедитесь, что поток включён в режим потоковой обработки, например, перед использованием в библиотеках типа ya-csv:

JS
Скопировать код
myStream.resume();

Это обеспечит правильную обработку данных в потоке.

Бережно обращайтесь с потоком

Возобновляем приостановленный поток

Если поток был приостановлен, его можно возобновить:

JS
Скопировать код
myStream.on('pause', () => {
  console.log('Поток приостановлен, возобновляем...');
  myStream.resume();
});

Возобновление позволит продолжить обработку данных без задержек.

Завершаем поток грамотно

При настройке потока с помощью Readable правильно завершите передачу данных:

JS
Скопировать код
stream.push('Ваши данные');
stream.push(null); // Передача данных завершена.

Отправка null сигнализирует об окончании потока, сообщая о завершении его использования.

Полезные материалы

  1. Stream | Документация Node.js v21.6.1 – Подробная информация о Stream API в Node.js.
  2. Understanding Node.js Streams – NodeSource – Глубокий материал об использовании потоков в Node.js.
  3. Node.js Streams: Everything You Need to Know – freeCodeCamp – Очень содержательный гид по потокам в Node.js.
  4. stream-adventure – GitHub — Интерактивные уроки по освоению потоков в Node.js.
  5. Fundamentals of Node.js Streams – SitePoint — Вводный курс по основам потоков Node.js.
  6. Buffer | Документация Node.js v21.6.1 — Документация Buffer API для работы с бинарными данными в Node.js.