我的代码有一些流问题,我不知道如何解决。
代码摘录: http: //gist.github.com/5689522
本质上,我在父转换流中有几个转换流,但是我在传递数据时遇到了问题,因为我在没有被转换的第一个流(S0)上使用推送,因此只是推送数据直接到第二个流(S1),并导致错误。通常我会.pipe()
用来连接流,但我无法从转换流内部看到如何做到这一点,因为我想管道输入,而不是输出,并且该_transform
函数只提供一个块(缓冲区)作为参数。
任何想法如何做这样的事情?
我的代码有一些流问题,我不知道如何解决。
代码摘录: http: //gist.github.com/5689522
本质上,我在父转换流中有几个转换流,但是我在传递数据时遇到了问题,因为我在没有被转换的第一个流(S0)上使用推送,因此只是推送数据直接到第二个流(S1),并导致错误。通常我会.pipe()
用来连接流,但我无法从转换流内部看到如何做到这一点,因为我想管道输入,而不是输出,并且该_transform
函数只提供一个块(缓冲区)作为参数。
任何想法如何做这样的事情?
你需要一起收集块
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);
=> "somedata" => "somedatahola muheres"
从文档中push
:
注意:这个函数应该由 Readable 实现者调用,而不是由 Readable 流的消费者调用。
既然你没有在执行中调用那个ParserStream
,你不应该调用_s0Stream.push
,你应该做_s0Stream.write
。在这种情况下,您可能还想传递您的done
回调。