2013-10-25 14 views
9

gzipで圧縮されたURLの要求をパイプしている次のコードがあります。これはうまく動作しますが、コードを数回実行しようとすると、以下のエラーが発生します。これを回避する方法はありますか?Node.js終了エラー後の書き込みzlib

ありがとうございました!

http.get(url, function(req) { 

    req.pipe(gunzip); 

    gunzip.on('data', function (data) { 
    decoder.decode(data); 
    }); 

    gunzip.on('end', function() { 
    decoder.result(); 
    }); 

}); 

エラー:書き込み可能なストリームが閉じられると

stack: 
    [ 'Error: write after end', 
    ' at writeAfterEnd (_stream_writable.js:125:12)', 
    ' at Gunzip.Writable.write (_stream_writable.js:170:5)', 
    ' at write (_stream_readable.js:547:24)', 
    ' at flow (_stream_readable.js:556:7)', 
    ' at _stream_readable.js:524:7', 
    ' at process._tickCallback (node.js:415:13)' ] } 
+0

'req'は' res'する必要があります –

答えて

18

、それはもう(see the documentation)のデータを受け入れることができない。これはあなたが、なぜあなたのコードが動作する最初の実行で、第二には」 write after endエラーが発生します。

ただ、要求ごとに新しいgunzipのストリームを作成します。

http.get(url, function(req) { 
    var gunzip = zlib.createGzip(); 
    req.pipe(gunzip); 

    gunzip.on('data', function (data) { 
    decoder.decode(data); 
    }); 

    gunzip.on('end', function() { 
    decoder.result(); 
    }); 

}); 
関連する問題