2012-02-24 111 views
2

我有一個應用程序將https請求發送到第三方服務來執行日誌記錄。出於某種原因,我幾個小時前就注意到第三方拒絕連接。但這是一個不同的話題。node.js中的異步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(); 

} 

,這就是由簡單地稱爲:

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

所以我很好奇,爲什麼拒絕連接從這個出站HTTPS請求,應掛,然後崩潰整個應用程序/超時。

謝謝!

+1

你可以添加一個''req.on(「錯誤」,...''聲明捕捉錯誤,看看是否能解決問題了嗎? – 2012-03-09 01:30:02

回答

0

程序掛起和印刷品沒有什麼,因爲它沒有趕上數據和你不告訴過程中做任何事情,但與[].join('')打印一個空字符串。沒有明確的IO指令任務指令,Node.js將不會返回。您需要在通過和執行一個回調函數,或致電process.exit();,在處理程序res.on("end", [handler]);,例如:

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

res.on("chunk", [handler]);不是一個標準的HTTPS事件。你可能打算像res.on("data", function(chunk) { body.push(chunk); });