1.2Kпросмотров
60.8%от подписчиков
12 апреля 2025 г.
Score: 1.3K
Потоки записи в Node.js — практическое руководство Node.js предоставляет мощную абстракцию ввода-вывода — Streams (потоки), которые позволяют эффективно обрабатывать данные частями, особенно когда речь идёт о больших объёмах данных. В этом руководстве мы сосредоточимся на Writable Streams — потоках, в которые можно записывать данные. Что такое Writable Stream? Writable Stream — это абстракция для источника данных, в который можно записывать. Примеры: - fs.createWriteStream() — запись в файл
- http.request() — отправка HTTP-запросов
- net.Socket — запись в TCP-сокет
- process.stdout — вывод в консоль Основные методы и события Метод .write(chunk, [encoding], [callback]) Используется для записи данных в поток. Возвращает true, если поток готов принять ещё данные, иначе — false. const fs = require('fs');
const stream = fs.createWriteStream('output.txt'); const result = stream.write('Hello, world!');
console.log(result); // true или false Метод .end([chunk], [encoding], [callback]) Завершает поток. При необходимости можно передать финальный кусок данных. stream.end('Final data'); События - drain — вызывается, когда поток снова готов к записи (если ранее вернул false).
- finish — вызывается после завершения записи (после .end()).
- error — при возникновении ошибки. stream.on('finish', () => console.log('Запись завершена.'));
stream.on('error', err => console.error('Ошибка:', err)); Управление потоком вручную Когда stream.write() возвращает false, это означает, что внутренний буфер переполнен. Чтобы избежать перегрузки, стоит дождаться события drain: function writeMany(stream, data, times) { let i = 0; function write() { while (i < times) { const ok = stream.write(data); if (!ok) { stream.once('drain', write); return; } i++; } stream.end(); } write();
} writeMany(fs.createWriteStream('big.txt'), 'data\n', 10000); Пользовательские Writable Streams Вы можете создать свой Writable Stream, расширив Writable из модуля stream: const { Writable } = require('stream'); class Logger extends Writable { _write(chunk, encoding, callback) { console.log(LOG: ${chunk.toString()}); callback(); }
} const logger = new Logger();
logger.write('Hello\n');
logger.end('Bye\n'); Итого Writable Streams — ключевой инструмент в Node.js для эффективной записи данных. Они позволяют управлять потоком, обрабатывать ошибки и даже создавать свои реализации. https://pavel-romanov.com/writable-streams-in-nodejs-a-practical-guide ✍️ @nodejs_lib