2012-02-24 12 views
2

私は、ログを実行するためにサードパーティのサービスへのhttpsリクエストを起動するアプリを持っています。何らかの理由で、私は数時間前に第三者が接続を拒否していることに気付きました。しかしそれは別の話題です。node.jsのAsync httpsリクエスト

私のnode.jsアプリで気付いていることは、リクエストが動的に作成されているにも関わらず、アプリ全体をハングアップしてはいけないということです。

プロセスを再起動すると、https要求がハングアップし、接続拒否エラーで終了します。サンプルコードは以下の通りです。

var logger = function(data){ 

    var req = https.request({ 
     host: 'logs.loggly.com', 
     port: 443, 
     path: '/inputs/<my real key is here, removed obviously>', 
     method: 'POST', 
     headers:{ 
      'content-type': 'application/json' 
     } 
    }, function(res){ 
     var body = []; 
     res.on('chunk', function(data){ 
      body.push(data); 
     }); 
     res.on('end', function(){ 
      console.log(body.join('')); 
     }) 
    }); 
    req.write(JSON.stringify(data)); 
    req.end(); 

} 

そして、それは単にで呼ばれています:接続要求がハングして、全体のアプリをクラッシュする必要があり、このアウトバウンドHTTPSから/タイムアウトを拒否した理由だから私は好奇心が強い

logger({ 'test': 'datafoo' }); 

ありがとうございます!

+1

"req.on(" error "、..." '宣言を追加してエラーをキャッチし、それがあなたの問題を解決するかどうか確認できますか? –

答えて

0

プログラムがハングアップし、データをキャッチしていないため、何も処理しないと空の文字列を[].join('')と表示していないため、何も印刷しません。 Node.jsはIOバインドされたタスクに関する明示的な命令なしでは返りません。あなたは、例えば、res.on("end", [handler]);のハンドラでは、渡すと、コールバック関数を実行し、またはprocess.exit();を呼び出す必要があります。:

res.on("end", function() { 
    console.log(body.join('')); 
    process.exit(); 
});

res.on("chunk", [handler]);標準HTTPSイベントではありません。あなたはおそらくres.on("data", function(chunk) { body.push(chunk); });のようなものを意図しました。

関連する問題