我使用以下代码在管道中压缩了URL的请求。这工作得很好,但是,如果我尝试执行几次代码,则会收到以下错误。有什么建议如何解决这个问题?

谢谢!

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)' ] }

最佳答案

一旦可写流关闭,它就不能再接受数据(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();
   });

});

10-01 07:26