我的代码有一些流问题,我不知道如何修复。
代码节选: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();
};
then reassign _flush function:
tstream._flush = function (done) {
data += 'hola muheres';
this.push(data);
done();
};
so all together:
req.pipe(anotherstream).pipe(tstream).pipe(response);
=比;"somedata"=比;"somedatahola muheres"
来自push
的文档:
注意:这个函数应该由可读的实现者调用,而不是可读流的消费者。
因为你没有调用ParserStream
的实现,你不应该调用_s0Stream.push
,你应该做_s0Stream.write
。在这种情况下,你可能也想传递你的done
回调。