Snabbreferens

Node.js Streams Fusklapp

En omfattande referensguide foer Node.js Streams: Readable, Writable, Transform och Duplex stroemmar, pipelines, haendelsehantering och flowing-laege.

· Publicerad

Streams aer sekventiella datastroemmar som hanteras i bitar, vilket moejliggoer effektiv bearbetning av stora filer utan att oeverbelasta minnet.

Översikt över Stream-Typer

Typ Riktning Beskrivning
Readable Endast läsning Källa som data kan läsas och konsumeras från
Writable Endast skrivning Destination som data kan skrivas till
Transform Läsning och skrivning Omvandlar eller ändrar data under genomströmning
Duplex Läsning och skrivning Både läs- och skrivbar med oberoende kanaler (t.ex. TCP-socket)

Pipeline och moderna stream/promises

Moderna Node.js erbjuder funktionen pipeline foer att koppla ihop stroemmar saekert med automatisk felhantering:

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('Komprimering slutförd');
}

Skapa Anpassade Streams

1. Anpassad Readable Stream

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

function createTimestampStream() {
  let count = 0;
  return new Readable({
    objectMode: true,
    read() {
      if (count >= 5) {
        this.push(null); // Slut på strömmen
      } else {
        this.push({ id: ++count, time: new Date() });
      }
    }
  });
}

2. Anpassad Transform Stream

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

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

3. Anpassad Writable Stream

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

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

Flowing-läge vs Paused-läge

Läsbara strömmar arbetar i antingen pausat läge (paused) eller flödande läge (flowing):

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

// Att lägga till en 'data'-lyssnare aktiverar automatiskt flowing-läget
stream.on('data', (chunk) => {
  console.log(`Mottog ${chunk.length} byte`);
});

// Explicit flödeskontroll
stream.pause();  // Pausa händelser tillfälligt
stream.resume(); // Återuppta strömningshändelser

Stream-Händelser

Händelse Gäller för Utlösningsvillkor
data Readable Utlöses när ett datablock är redo att läsas
end Readable Utlöses när det inte finns mer data att läsa
finish Writable Utlöses när all skriven data har spolats ut till mottagaren
error All Utlöses när ett ohanterat fel inträffar i strömmen
close All Utlöses när den underliggande resursen stängs

Referenser

Relaterade ämnen