Snelle referentie

Node.js Streams Spiekbrief

Een complete gids voor Node.js Streams: Readable, Writable, Transform en Duplex streams, pipelines, event-handling en flowing-modus.

· Gepubliceerd

Streams zijn gegevensstromen die in stukjes worden verwerkt, waardoor grote bestanden en netwerkdata geheugenefficiënt verwerkt worden.

Overzicht van Stream-Types

Type Richting Beschrijving
Readable Alleen-lezen Bron waaruit gegevens kunnen worden gelezen
Writable Alleen-schrijven Bestemming waarnaar gegevens kunnen worden geschreven
Transform Lezen & Schrijven Transformeert of wijzigt gegevens tijdens de doorgang
Duplex Lezen & Schrijven Zowel lees- als schrijfbaar met onafhankelijke kanalen (bijv. TCP-socket)

Pipeline en modern stream/promises

Modern Node.js biedt pipeline om streams veilig te koppelen met automatische foutafhandeling en resource-opschoning:

const { pipeline } = require('stream/promises');
const fs = require('fs');
const zlib = require('zlib');

async function compressFile() {
  await pipeline(
    fs.createReadStream('source.tar'),
    zlib.createGzip(),
    fs.createWriteStream('source.tar.gz')
  );
  console.log('Compressie voltooid');
}

Aangepaste Streams Maken

1. Aangepaste Readable Stream

const { Readable } = require('stream');

function createTimestampStream() {
  let count = 0;
  return new Readable({
    objectMode: true,
    read() {
      if (count >= 5) {
        this.push(null); // Einde van stream
      } else {
        this.push({ id: ++count, time: new Date() });
      }
    }
  });
}

2. Aangepaste Transform Stream

const { Transform } = require('stream');

const uppercaseTransformer = new Transform({
  transform(chunk, encoding, callback) {
    const transformed = chunk.toString().toUpperCase();
    callback(null, transformed);
  }
});

3. Aangepaste Writable Stream

const { Writable } = require('stream');

const consoleWriter = new Writable({
  objectMode: true,
  write(chunk, encoding, callback) {
    console.log('Schrijven van chunk:', chunk);
    callback();
  }
});

Flowing-modus vs Paused-modus

Leesbare streams werken in de gepauzeerde (paused) of vloeiende (flowing) modus:

const stream = fs.createReadStream('data.csv');

// Het toevoegen van een 'data'-listener activeert automatisch de flowing-modus
stream.on('data', (chunk) => {
  console.log(`Ontvangen: ${chunk.length} bytes`);
});

// Expliciete stroomregeling
stream.pause();  // Gebeurtenissen tijdelijk pauzeren
stream.resume(); // Streaming-gebeurtenissen hervatten

Stream-Gebeurtenissen

Gebeurtenis Van toepassing op Trigger-voorwaarde
data Readable Geactiveerd wanneer een stuk gegevens klaar is voor verwerking
end Readable Geactiveerd wanneer er geen gegevens meer beschikbaar zijn
finish Writable Geactiveerd wanneer alle geschreven gegevens zijn weggeschreven
error All Geactiveerd bij een niet-afgehandelde streamfout
close All Geactiveerd wanneer de onderliggende descriptor wordt gesloten

Referenties

Verwante onderwerpen