如何捕获node.js中的zlib错误

我正在从可能被压缩的服务器上下载内容,所以我正在使用我在各种地方发现的样板文件:

var file = fs.createWriteStream(filename); var request = https.get(url, function(response) { switch (response.headers['content-encoding']) { case 'gzip': response.pipe(zlib.createGunzip()).pipe(file); break; case 'deflate': response.pipe(zlib.createInflate()).pipe(file); break; default: response.pipe(file); break; } file.on('finish', function() { console.log("Done: "+url); file.close(function() {}); }); }).on('error', function(err) { // Handle errors fs.unlink(filename, function() {}); console.log(err+" "+url); }); 

麻烦的是,如果HTTPS请求因networking错误而失败,我有时会得到这个exception:

 Error: unexpected end of file at Zlib._handle.onerror (zlib.js:363:17) 

该exception没有被该“错误”事件处理程序捕获。 那么如何捕捉它,所以我可以正确地清理文件,知道再试一次?

你有与请求相关的error handling程序,但不是与解压缩和保存文件有关的错误。 尝试捕获解压缩stream中的错误:

 var decompressed; switch (response.headers['content-encoding']) { case 'gzip': decompressed = response.pipe(zlib.createGunzip()); break; case 'deflate': decompressed = response.pipe(zlib.createInflate()); break; default: decompressed = response; break; } decompressed.on('error', function(err) { // handle error }); decompressed.pipe(file); 

对于更多的阅读按照这个答案 – 与node.jsstream处理错误