Node.js
从 v16.5.0
版本开始,原生支持 Web Streams API
。
这使得开发者可以在 Node.js
中使用与浏览器中相同的流处理接口。
Web Streams API
在 Node.js
中提供了一组标准的、跨平台的流接口,可以简化在不同环境下处理流数据的工作。
它包括三种主要的流:
ReadableStream
: 用于从数据源读取数据。WritableStream
: 用于将数据写入目标。TransformStream
: 用于在流中转换数据。
js
const {
ReadableStream,
WritableStream
} = require('node:stream/web')
const readableStream = new ReadableStream({
start(controller) {
// 将数据推送到流中
controller.enqueue('Hello, world!')
controller.close()
}
})
const writableStream = new WritableStream({
write(chunk) {
console.log(`写入的数据: ${chunk}`)
}
})
// 管道传输数据
readableStream.pipeTo(writableStream).then(() => {
console.log('数据传输完成')
})
1.ReadableStream
js
const { ReadableStream } = require('node:stream/web')
const readableStream = new ReadableStream({
start(controller) {
// 将数据块推送到流中
controller.enqueue('Hello, ')
controller.enqueue('world!')
controller.close()
}
})
const reader = readableStream.getReader()
reader.read().then(({ done, value }) => {
if (!done) {
console.log(value) // 输出: Hello,
}
return reader.read()
}).then(({ done, value }) => {
if (!done) {
console.log(value) // 输出: world!
}
})
2.WritableStream
js
const { WritableStream } = require('node:stream/web')
const writableStream = new WritableStream({
write(chunk) {
console.log(`写入的数据: ${chunk}`)
},
close() {
console.log('流关闭')
}
})
const writer = writableStream.getWriter()
writer.write('Hello, ').then(() => {
return writer.write('world!')
}).then(() => {
writer.close()
})
3.TransformStream
js
const { TransformStream } = require('node:stream/web')
const transformStream = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase())
}
})
const readableStream = new ReadableStream({
start(controller) {
controller.enqueue('hello, ')
controller.enqueue('world!')
controller.close()
}
})
const writableStream = new WritableStream({
write(chunk) {
console.log(`转换后的数据: ${chunk}`)
}
})
// 将可读流通过转换流传输到可写流
readableStream.pipeThrough(transformStream).pipeTo(writableStream)