如何处理ETIMEDOUT错误



如何处理这个调用的超时错误?

 var remotePath = "myremoteurltocopy"
 var localStream = fs.createWriteStream("myfil");;
        var out = request({ uri: remotePath });
        out.on('response', function (resp) {
            if (resp.statusCode === 200) {
                out.pipe(localStream);
                localStream.on('close', function () {
                    copyconcurenceacces--;
                    console.log('aftercopy');
                    callback(null, localFile);
                });
            }
            else
                callback(new Error("No file found at given url."), null);
        })

有没有办法等得更久?或者再次请求远程文件?

究竟是什么导致了这个错误?超时?

这是由于您的请求响应没有在给定的时间内收到(通过timeout请求模块选项)。

基本上要先捕获这个错误,你需要在error上注册一个处理程序,这样未处理的错误就不会再被抛出:out.on('error', function (err) { /* handle errors here */ })。这里有更多的解释。

在处理程序中,您可以检查错误是否为ETIMEDOUT并应用自己的逻辑:if (err.message.code === 'ETIMEDOUT') { /* apply logic */ }

如果您想再次请求文件,我建议使用节点重试或节点回退模块。它使事情简单得多。

如果您想等待更长的时间,您可以自己设置请求的timeout选项。

我们可以查看错误对象的属性code,其中提到可能的系统错误,并且在ETIMEDOUT的情况下,网络调用失败,相应地采取行动。

if (err.code === 'ETIMEDOUT') {
    console.log('My dish error: ', util.inspect(err, { showHidden: true, depth: 2 }));
}

如果您正在使用node js,那么这可能是可能的解决方案

const express = require("express");
const app = express();
const server = app.listen(8080);
server.keepAliveTimeout = 61 * 1000;

https://medium.com/hk01 tech/running -的-的-生产- - 2年- kubernetes旅程-在- hk01 - 68130 - e603d76

尝试切换internet网络并再次测试您的代码。我得到了这个错误,唯一的解决办法是切换到另一个互联网。

编辑:我现在知道除了我之外的人有这个错误,解决方案是与ISP沟通,并要求他们检查dns配置,因为http请求失败。因此,交换网络绝对可以帮助解决这个问题。

这就是为什么我不会删除这篇文章。

使用不同的网络。使用不同的网络在几秒钟内就解决了这个问题。可能是因为另一个网络有更强的连接。

相关内容

  • 没有找到相关文章

最新更新