Node.js 在不消耗的情况下将流复制到文件中
Node.js copy a stream into a file without consuming
给定函数解析传入流:
async onData(stream, callback) {
const parsed = await simpleParser(stream)
// Code handling parsed stream here
// ...
return callback()
}
我正在寻找一种简单而安全的方法来 'clone' 该流,这样我就可以将它保存到一个文件中用于调试目的,而不影响代码。这可能吗?
假代码中的相同问题:我正在尝试做这样的事情。显然,这是一个虚构的例子,是行不通的。
const fs = require('fs')
const wstream = fs.createWriteStream('debug.log')
async onData(stream, callback) {
const debugStream = stream.clone(stream) // Fake code
wstream.write(debugStream)
const parsed = await simpleParser(stream)
// Code handling parsed stream here
// ...
wstream.end()
return callback()
}
不,您不能在不消费的情况下克隆可读流。但是,您可以通过管道传输两次,一次用于创建文件,另一次用于 'clone'.
代码如下:
let Readable = require('stream').Readable;
var stream = require('stream')
var s = new Readable()
s.push('beep')
s.push(null)
var stream1 = s.pipe(new stream.PassThrough())
var stream2 = s.pipe(new stream.PassThrough())
// here use stream1 for creating file, and use stream2 just like s' clone stream
// I just print them out for a quick show
stream1.pipe(process.stdout)
stream2.pipe(process.stdout)
给定函数解析传入流:
async onData(stream, callback) {
const parsed = await simpleParser(stream)
// Code handling parsed stream here
// ...
return callback()
}
我正在寻找一种简单而安全的方法来 'clone' 该流,这样我就可以将它保存到一个文件中用于调试目的,而不影响代码。这可能吗?
假代码中的相同问题:我正在尝试做这样的事情。显然,这是一个虚构的例子,是行不通的。
const fs = require('fs')
const wstream = fs.createWriteStream('debug.log')
async onData(stream, callback) {
const debugStream = stream.clone(stream) // Fake code
wstream.write(debugStream)
const parsed = await simpleParser(stream)
// Code handling parsed stream here
// ...
wstream.end()
return callback()
}
不,您不能在不消费的情况下克隆可读流。但是,您可以通过管道传输两次,一次用于创建文件,另一次用于 'clone'.
代码如下:
let Readable = require('stream').Readable;
var stream = require('stream')
var s = new Readable()
s.push('beep')
s.push(null)
var stream1 = s.pipe(new stream.PassThrough())
var stream2 = s.pipe(new stream.PassThrough())
// here use stream1 for creating file, and use stream2 just like s' clone stream
// I just print them out for a quick show
stream1.pipe(process.stdout)
stream2.pipe(process.stdout)