为什么此流功能会导致错误?

时间:2015-06-21 14:05:51

标签: javascript node.js stream

我已经编写了一个管道函数,它将提供的参数记录到控制台。

function sconsole() {
    var stream = new Stream.Transform({objectMode: true}),
        foo = [].slice.call(arguments);

    stream._transform = function (data, encoding, callback) {
        console.log.apply(null, foo);
        callback(null, data);
    };

    return stream;
}

使用示例:

stream
  .pipe(sconsole('foo'))
  .pipe(...);

但是当在一系列管道调用的最终位置使用时,会导致以下错误:

TypeError: Invalid non-string/buffer chunk

为什么?

1 个答案:

答案 0 :(得分:2)

您不能将/ objectMode和非objectMode流混合在一起,因为它们可以使用不同的数据类型。

但是,如果您有节点v0.12 +或io.js,那么可以使用类似readableObjectMode: true的内容,它会设置转换流的可读面以读取对象,但是正常写字节。您可以使用writableObjectMode: true来执行类似的操作(objectMode: true相当于将这两个属性设置为true)。这样您就可以在一种流类型之间进行转换。