2016-05-12 14 views
3

Meine Frage ist ähnlich zu dieser Frage: Node Js :is it possible to hit 1000 http get request to some api from a node js server aber ihre Lösung von Drossel hat nicht für mich funktioniert.Node.js https Anfrage bekommen ECONNRESET

Ich rufe unsere API/Website an, die auf Google App Engine gehostet wird, um eine Aufgabe zum Aktualisieren des Memcache für bestimmte Produktseiten auszulösen. Diese Funktion updateCache wird von einem async.eachSeries aufgerufen. Der Code ist ziemlich geradlinig: (dies ist eine bereinigte Version)

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(); 
} 

Es läuft perfekt auf meinem Mac-Maschine, aber ich brauche das Skript auf einem Windows-PC laufen mit Windows 7 und das ist Were wird es diesen Fehler :

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) 
+0

Haben Sie diesen verwandten Beitrag gesehen - http://StackOverflow.com/Questions/17245881/Node-JS-ECONNRESET – ThisClark

+0

Ich implementierte eine Lösung, die ich fand auf [stackoverflow] (http : //stackoverflow.com/questions/19322248/node-js-unterscheiden-fehler-wenn-machen-http-request). Bis jetzt lief mein Skript gut. –

+0

Ich habe immer noch Fehler in der 'req.on (' timeout ', ...) 'geworfen, so dass der Code, den ich befolgte, konnte den Fehler zu fangen, aber ich weiß immer noch nicht, wie die Timeouts und Verbindungen zu schließen –

Antwort

3

folgte ich dieser solution und es so etwas wie dieses aussah.

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 würde die Funktion nur, dass ich dies in gewickelt es kann n ot "korrekt", aber es funktioniert derzeit für mich. Wenn jemand Verbesserungen hat, bitte lass es mich wissen