我编写了一个要通过管道传送到的函数,它将提供的参数记录到控制台。
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
为什么?
您
不能像这样将objectMode
和非objectMode
流混合/管道在一起,因为它们使用不同的数据类型。
但是,如果您有节点 v0.12+ 或 io.js,则可以使用 readableObjectMode: true
之类的内容,它将转换流的可读端设置为读取对象,但正常写入字节。您可以使用 writableObjectMode: true
对相反的方式执行类似操作(objectMode: true
等效于将这两个属性都设置为 true
)。这样,您可以在一种流类型之间转换到另一种流类型。