Nodejs:我可以设置stream.obnsform的objectMode吗?

时间:2017-07-21 04:10:56

标签: node.js stream

我可以像下面的代码一样设置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)




我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

原因是虽然自定义Transform类已正确配置为输入和输出任何值,但wr Writable流只需要Buffer s或字符串。因此,当您push()使用非Buffer /字符串时,您将收到您当前看到的错误。

如果您只想为Transform流的一侧启用对象模式,则可以将readableObjectModewritableObjectMode设置为true而不是objectMode }(相当于将前两个设置为true)。