javascript - Node.js solicitud https get ECONNRESET
Mi pregunta es similar a esta pregunta: Node Js: ¿es posible realizar 1000 solicitudes HTTP GET a alguna API desde un servidor Node Js pero su solución de limitación no funcionó para mí.
Estoy haciendo llamadas a nuestra API/sitio web alojado en Google App Engine para activar una tarea que actualice la memoria caché para páginas de productos específicas. Esta función updateCache se llama desde un async.eachSeries. El código es bastante directo: (esta es una versión saneada)
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();
}
Funciona perfectamente en mi máquina Mac, pero necesito que el script se ejecute en un PC con Windows usando Windows 7 y ahí es donde aparece este error:
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)
Respuesta #1
Seguí esta solución y se veía algo así:
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 sería simplemente la función en la que envolví esto. Puede que no sea "correcta", pero actualmente me está funcionando. Si alguien tiene mejoras sobre esto, por favor hágamelo saber
