Noções Básicas de Streams
8 exemplos para você começar com Streams - 6 básicos e 2 intermediários.
Busque em todas as páginas da documentação
8 exemplos para você começar com Streams - 6 básicos e 2 intermediários.
import { Readable, Writable } from 'node:stream'.Gere blocos sem carregar tudo na memória.
import { Readable } from 'node:stream';
const readable = Readable.from(['chunk-a', 'chunk-b', 'chunk-c']);
for await (const chunk of readable) {
console.log(chunk);
}Readable.from envolve iteráveis e iteráveis assíncronos.for await...of consome até o final null.objectMode: true.Relacionado: Padrões Readable & Writable - modos
Conecte produtor a consumidor - encadeamento clássico no estilo Unix.
import { createWriteStream } from 'node:fs';
import { Readable } from 'node:stream';
Readable.from(['line1\n', 'line2\n']).pipe(createWriteStream('out.txt'));pipe conecta data a write e lida com end.pipeline em produção.pipe não encaminha erros automaticamente em padrões mais antigos.Relacionado: stream/promises.pipeline - encadeamento seguro
Transmita arquivos grandes do disco.
import { createReadStream } from 'node:fs';
const stream = createReadStream('package.json', { encoding: 'utf8', highWaterMark: 64 * 1024 });
stream.on('data', (chunk) => console.log('chunk', chunk.length));
stream.on('end', () => console.log('done'));highWaterMark controla o tamanho do buffer interno por stream.pipeline para respostas HTTP para downloads.ServerResponse é um stream Writable.
import { createServer } from 'node:http';
import { createReadStream } from 'node:fs';
createServer((req, res) => {
createReadStream('package.json').pipe(res);
}).listen(3000);writeHead primeiro.pipeline cuida da limpeza.Altere os dados enquanto eles passam.
import { Transform } from 'node:stream';
const upper = new Transform({
transform(chunk, _enc, cb) {
cb(null, String(chunk).toUpperCase());
},
});
Readable.from(['hello']).pipe(upper).pipe(process.stdout);cb(err, data) sinaliza chunk processado ou erro._flush é executado no final para saída pendente.Relacionado: Transform & Duplex - pipelines de análise
Transmita objetos JavaScript em vez de bytes.
import { Transform } from 'node:stream';
const parseLines = new Transform({
objectMode: true,
transform(chunk, _enc, cb) {
const lines = String(chunk).split('\n').filter(Boolean);
for (const line of lines) this.push({ line });
cb();
},
});highWaterMark conta objetos em modo de objeto, não bytes.data.Propagação de erros e limpeza em uma única chamada.
import { pipeline } from 'node:stream/promises';
import { createReadStream, createWriteStream } from 'node:fs';
import { createGzip } from 'node:zlib';
await pipeline(
createReadStream('access.log'),
createGzip(),
createWriteStream('access.log.gz'),
);pipeline destrói streams em caso de erro ou fechamento antecipado.try/catch em manipuladores assíncronos..pipe().pipe().Relacionado: stream/promises.pipeline - mergulho profundo
Writable sinaliza quando não pode aceitar mais dados.
import { Readable, Writable } from 'node:stream';
const slow = new Writable({
write(chunk, _enc, cb) {
setTimeout(() => cb(), 100);
},
});
const fast = Readable.from(['a', 'b', 'c', 'd']);
fast.pipe(slow); // pipe lida com pause/resume automaticamentewrite retorna false, pause o readable até drain.read manuais devem verificar o valor de retorno de writable.write.Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026