我的问题类似于这个问题:Node Js :is it possible to hit 1000 http get request to some api from a node js server但是他们的 throttle 解决方案对我不起作用。
我正在调用托管在 Google App Engine 上的我们的 api/网站,以触发更新特定产品页面的内存缓存的任务。此函数 updateCache
从 async.eachSeries
调用。代码非常简单:(这是经过清理的版本)
function updateCache(object_name, callback) {
var options = {
host : 'www.example.com',
path : '/update-cache/' + object_name,
method : 'GET',
agent : false,
};
var req = https.request(options, function(res) {
res.on('data', function() {
if (res.statusCode !== 200) {
console.log('successful');
}
});
res.on('end', function() {
console.log('end');
callback();
});
});
req.on('error', function(e) {
console.log('failed');
console.error(e.stack);
callback();
});
req.end();
}
它在我的 Mac 机器上运行完美,但我需要脚本在使用 Windows 7 的 Windows PC 上运行,如果它收到此错误:
events.js:141
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at exports._errnoException (util.js:870:11)
at TCP.onread (net.js:552:26)
最佳答案
我关注了这个solution它看起来像这样:
var req = https.request(options, function(res) {
res.on('data', function() {
if (res.statusCode !== 200) {
// HANDLE
}
});
res.on('end', function() {
if (res.statusCode !== 200 && app.retry_count < 10) {
app.retry_count += 1;
retriggerFunction(param, callback);
} else {
app.retry_count = 0;
return callback();
}
});
});
req.on('error', function(e) {
app.retry_count += 1;
retriggerFunction(param, callback);
});
req.on('timeout', function(e) {
app.retry_count += 1;
retriggerFunction(param, callback);
req.abort();
});
req.on('uncaughtException', function(e) {
app.retry_count += 1;
retriggerFunction(param, callback);
req.abort();
});
retriggerFunction
只是我将其包装在其中的函数。它可能不“正确”,但它目前正在为我工作。如果有人对此有改进,请告诉我
关于javascript - Node.js https 获取请求 ECONNRESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37195098/