Node.js https获取请求ECONNRESET

Node.js https get request ECONNRESET

本文关键字:请求 ECONNRESET 获取 https js Node      更新时间:2023-09-26

我的问题类似于这个问题:Node Js:是否有可能从Node Js服务器向某个api发出1000 http get请求,但他们的油门解决方案对我不起作用。

我正在调用我们在谷歌应用引擎上托管的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电脑上运行得很好,但我需要脚本在使用Windows7的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)

我遵循了这个解决方案,它看起来像这样:

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只是我封装的函数。它可能不"正确",但目前对我有效。如果有人对此有改进,请告诉我