当前位置: 首页 > 知识库问答 >
问题:

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

蒋乐意
2023-03-14

我正在从可能被压缩的服务器下载内容,所以我使用了我在不同地方找到的样板:

    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请求因网络错误而失败,我有时会引发以下异常:

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

该“错误”事件处理程序未捕获异常。那么我如何捕获它,以便能够正确地清理文件并知道如何重试?

共有1个答案

孙岳
2023-03-14

您有与请求相关的错误处理程序,但没有与解压缩和保存文件相关的错误处理程序。尝试捕获解压缩流中的错误:

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

要了解更多信息,请遵循以下答案-节点的错误处理。js流

 类似资料:
  • 问题内容: 所有四个箭头键(左上右下)的utf8代码是什么? 我正在学习node.js,并且试图检测何时按下了这些键。 这是我的工作,但是没有一个能捕获箭头键…我是node.js的新手,所以我在这里可能做得很愚蠢。 谢谢。 问题答案: 您可以使用按键包。尝试页面上给出的示例。 您可以按顺序获取箭头键的UTF-8值。

  • 问题内容: 我刚刚发现Node(已测试:v0.8.23,当前git:v0.11.3-pre)在其Buffer处理中忽略了任何解码错误,以(Unicode REPLACEMENT CHARACTER)静默替换了任何非utf8字符,而不是抛出异常非utf8输入。因此,,和朋友面膜类大对你坏输入错误的。 不会失败但确实应该的示例: 是合法的utf8中可能出现的完全有效的字符(作为sequence ),因

  • 我有下面的代码,我用它来让一个用户静默登录 如果用户无法静默登录,将会导致错误。 我遇到的问题是,我似乎无法抓住例外。捕获错误或捕获块正在被击中。如何捕获此错误?

  • 在任何地方都找不到关于这个的文章。我基本上希望从程序中捕获“找不到模块”错误,并可以选择要求安装它,但即使使用try/catch语句,我似乎也无法捕获任何错误。这可能吗?我哪儿都没见过。 例如: 我想这可以通过一个独立的.js启动文件来完成,而无需任何第三方的要求,只需使用检查,然后从子进程运行,然后与另一个子进程一起运行。但感觉在单个app.js文件中执行此操作会更容易

  • 问题内容: 我有这样的代码,可以在没有定义路线的情况下渲染玉器模板。可以把它想成express.static,但是它用URL调用res.render。 问题在于res.render()不会引发错误。而是呈现错误页面。有没有办法检测丢失的模板或任何渲染错误? 问题答案: 一个更好的方法是使用render的callback ,而不是需要另一个回调,而是:

  • 问题内容: 我在Python中构建了一个简短的url转换器引擎,并且看到大量的“管道破损”错误,并且很好奇在使用BaseHTTPServer类时如何最好地捕获它。这不是全部代码,但可以让您大致了解我目前正在做什么: 该代码本身运行良好,但是在生产中几乎立即开始引发错误: 这些错误的大部分似乎源于在调用send_header()方法时遇到的问题,其中我要写的是: 所以我很好奇在我的代码中尝试捕获此I