Node.js streams API ↗ 是 JavaScript 中处理流数据的原始 API,早于 WHATWG ReadableStream 标准 ↗。流是 Node.js 中处理流数据的抽象接口。流可以是可读的、可写的,或两者兼有。所有流都是 EventEmitter 的实例。
在可能的情况下,应使用 WHATWG 标准「Web Streams」API ↗,Workers 已支持该 API ↗。
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));
},
};更多信息请参阅 Node.js stream 文档 ↗。