2013-10-25 11 views
9

Ich habe den folgenden Code, wo ich die Anfrage einer URL, die Gzipped ist. Das funktioniert gut, aber wenn ich versuche, den Code ein paar Mal auszuführen, erhalte ich den folgenden Fehler. Irgendwelche Vorschläge, wie man das umgehen kann?Node.js schreibe nach Ende Fehler zlib

Vielen Dank!

http.get(url, function(req) { 

    req.pipe(gunzip); 

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

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

}); 

Fehler:

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' sollte' res' –

Antwort

18

Sobald ein beschreibbarer Strom geschlossen ist, kann es nicht akzeptieren, mehr Daten (see the documentation): Aus diesem Grund bei der ersten Ausführung wird Ihr Code arbeiten, und auf der zweiten Sie‘ Ich habe den write after end Fehler.

Erstellen Sie einfach einen neuen gunzip Strom für jede Anforderung:

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(); 
    }); 

});