我可以像下面的代码一样设置objectMode吗? 如果没有,如何解决?
tks,兄弟。
class com extends stream.Transform {
constructor(opt) {
super(Object.assign({}, {objectMode: true}, opt));
}
_transform(chunk, enc, callback) {
let ret = compiler(chunk);
this.push(ret);
callback();
}
}
let st = fs.createReadStream('./com/a.com');
let wr = fs.createWriteStream('./com/b.com');
let c = new com({objectMode: true});
st.pipe(c).pipe(wr);

运行它,并收到一些错误。 我在nodeV6.11.1中运行它,但收到错误:
TypeError: Invalid non-string/buffer chunk
at validChunk (_stream_writable.js:211:10)
at WriteStream.Writable.write (_stream_writable.js:241:21)
at com.ondata (_stream_readable.js:555:20)

我的代码有什么问题吗?
答案 0 :(得分:1)
原因是虽然自定义Transform类已正确配置为输入和输出任何值,但wr
Writable
流只需要Buffer
s或字符串。因此,当您push()
使用非Buffer
/字符串时,您将收到您当前看到的错误。
如果您只想为Transform
流的一侧启用对象模式,则可以将readableObjectMode
或writableObjectMode
设置为true
而不是objectMode
}(相当于将前两个设置为true
)。