我使用以下代码在管道中压缩了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();
});
});