如何处理这个调用的超时错误?
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请求失败。因此,交换网络绝对可以帮助解决这个问题。这就是为什么我不会删除这篇文章。
使用不同的网络。使用不同的网络在几秒钟内就解决了这个问题。可能是因为另一个网络有更强的连接。