我的代码遇到了一些流问题,我不知道如何修复。
代码摘录:http://gist.github.com/5689522
基本上,我在父变换流中有一些变换流,但是我在传递数据方面遇到了问题,因为我在第一个流(S0)上使用了push而没有被转换,并且因此只是将数据直接输入第二个流(S1),并导致错误。通常我会使用.pipe()
来连接流,但我无法看到如何从变换流内部做到这一点,因为我想管道输入而不是输出,而_transform
函数只给出一个块(缓冲区)作为参数。
任何想法如何做这样的事情?
答案 0 :(得分:2)
你需要一起收集块
var data='', tstream = new stream.Transform();
tstream._transform = function (chunk, encoding, done) {
data += chunk.toString();
done();
};
然后重新分配_flush功能:
tstream._flush = function(done){
data += 'hola muheres';
this.push(data);
done();
};
所以一起:
req.pipe(anotherstream).pipe(tstream).pipe(response);
=> “一些数据” => “somedatahola muheres”
答案 1 :(得分:0)
来自push
的文档:
注意:此函数应由可读实现者调用,而不是由可读流的使用者调用。
由于您未在ParserStream
的实施中调用,因此您不应该致电_s0Stream.push
,而应该_s0Stream.write
。在这种情况下,你可能也希望传递done
回调。