2016-05-12 14 views
3

私の質問はこの質問に似ています:Node Js :is it possible to hit 1000 http get request to some api from a node js serverしかし、彼らの解決策は私のために働いていませんでした。Node.js https取得リクエストECONNRESET

Google App Engineでホストされているapi /ウェブサイトを呼び出して、特定の製品ページのMemcacheを更新するタスクを開始します。この関数updateCacheasync.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) 
+0

私は[stackoverflow]で見つけた解決策を実装しました。http:http://stackoverflow.com/questions/17245881/node-js-econnreset – ThisClark

+0

://stackoverflow.com/questions/19322248/node-js-distinguishing-errors-when-making-http-request)。これまでのところ、私のスクリプトは正常に動作しています。 –

+0

私は 'req.on( 'timeout'、...)'にエラーを投げているので、私が続いたコードはエラーを捕らえることができましたが、私はまだタイムアウトと接続を閉じる方法を知らない –

答えて

3

私はこの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はちょうど私がこの中に包まれた機能だろうこれは、nがあります。 "正しい"とは思わないが、現在私のために働いている。誰にも改善がある場合は、私に教えてください

関連する問題