Node.JS转换流 - 数据丢失

时间:2013-06-01 07:12:08

标签: node.js stream buffer

我的代码遇到了一些流问题,我不知道如何修复。

代码摘录:http://gist.github.com/5689522

基本上,我在父变换流中有一些变换流,但是我在传递数据方面遇到了问题,因为我在第一个流(S0)上使用了push而没有被转换,并且因此只是将数据直接输入第二个流(S1),并导致错误。通常我会使用.pipe()来连接流,但我无法看到如何从变换流内部做到这一点,因为我想管道输入而不是输出,而_transform函数只给出一个块(缓冲区)作为参数。

任何想法如何做这样的事情?

2 个答案:

答案 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回调。