INTEGRITY Dokumentace

Streams

Node.js streams API je původní API pro práci se streamovanými daty v JavaScriptu, které vzniklo dříve než standard WHATWG ReadableStream. Stream je abstraktní rozhraní pro práci se streamovanými daty v Node.js. Streamy mohou být čitelné, zapisovatelné, nebo obojí. Všechny streamy jsou instancemi EventEmitter.

Kdykoli je to možné, měli byste použít standard WHATWG "Web Streams" API, což je podporováno ve Workers.

import { Readable, Transform } from "node:stream";

import { text } from "node:stream/consumers";

import { pipeline } from "node:stream/promises";

// A Node.js-style Transform that converts data to uppercase
// and appends a newline to the end of the output.
class MyTransform extends Transform {
	constructor() {
		super({ encoding: "utf8" });
	}
	_transform(chunk, _, cb) {
		this.push(chunk.toString().toUpperCase());
		cb();
	}
	_flush(cb) {
		this.push("\n");
		cb();
	}
}

export default {
	async fetch() {
		const chunks = [
			"hello ",
			"from ",
			"the ",
			"wonderful ",
			"world ",
			"of ",
			"node.js ",
			"streams!",
		];

		function nextChunk(readable) {
			readable.push(chunks.shift());
			if (chunks.length === 0) readable.push(null);
			else queueMicrotask(() => nextChunk(readable));
		}

		// A Node.js-style Readable that emits chunks from the
		// array...
		const readable = new Readable({
			encoding: "utf8",
			read() {
				nextChunk(readable);
			},
		});

		const transform = new MyTransform();
		await pipeline(readable, transform);
		return new Response(await text(transform));
	},
};

Viz Dokumentace Node.js pro stream s dalšími informacemi.