我已经编写了一个管道函数,它将提供的参数记录到控制台。
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
为什么?
答案 0 :(得分:2)
您不能将/ objectMode
和非objectMode
流混合在一起,因为它们可以使用不同的数据类型。
但是,如果您有节点v0.12 +或io.js,那么可以使用类似readableObjectMode: true
的内容,它会设置转换流的可读面以读取对象,但是正常写字节。您可以使用writableObjectMode: true
来执行类似的操作(objectMode: true
相当于将这两个属性设置为true
)。这样您就可以在一种流类型之间进行转换。