Node.js中的asynchronoushttps请求

我有一个应用程序,启动https请求到第三方服务执行日志logging。 出于某种原因,我注意到几个小时前,第三方拒绝连接。 但这是一个不同的话题。

我注意到我的node.js应用程序是,尽pipe请求被dynamic创build,因此不应该挂在整个应用程序,他们是。

进程重新启动后,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请求连接拒绝/超时应挂起,然后崩溃整个应用程序。

谢谢!

该程序挂起和打印什么都没有,因为它不捕获数据,而且你不告诉进程做任何事情,而是用[].join('')打印一个空string。 Node.js将不会返回没有明确指示的IO绑定任务。 你需要传递并执行一个callback函数,或者调用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); });