2016-09-27 38 views
0

我正在创建一个脚本,每秒向请求摄像机网络的本地服务器发出一次请求2次,并且在获得相机检测到某人的肯定响应后,我要记录三次图片。使用Node.js成功发出http请求后的日志图像

在JSON配置文件我有triggerURL服务器中,间隔端口,该DATADIR其中记录的图像应该被保存和轨道数组,它包含这些图像的URL和他们应该收到的fileName

这是脚本的代码,我读了JSON文件后使用:

var configGet = { 
    host: config.triggerURL 
    , port: config.interval 
    , method: 'GET' 
}; 

setInterval(function() { 
    var request = http.request(configGet, function (response) { 
     var content = ""; 

     // Handle data chunks 
     response.on('data', function (chunk) { 
      content += chunk; 
     }); 

     // Once we're done streaming the response, parse it as json. 
     response.on('end', function() { 
      var data = JSON.parse(response); 

      if (data.track.length > 0) { 
       //log images 
       var download = function (uri, filename, callback) { 
        request.head(uri, function (err, res, body) { 
         request(uri) 
          .pipe(fs.createWriteStream(filename)) 
          .on('close', callback); 
        }); 
       }; 
       for (var image in data.track) { 
        var path = config.dataDir + '/' + image.fileName 
        download(image.url, path.format(config.timestamp), function() { 
         console.log('done'); 
        }); 
       } 
      } 
     }); 

     // Report errors 
     request.on('error', function (error) { 
      console.log("Error while calling endpoint.", error); 
     }); 

     request.end(); 
    }, 500); 
}); 

我有以下问题:

  1. 这种方法产生了某种错误与下载过程你可以识别它吗?

  2. 有没有更好的方法来做这个过程?

回答

0
  1. 没有运行代码或更深检查;不应该“data = JSON.parse(response)”而是“data = JSON.parse(content)”?此外,如果数据未定义或不包含“轨道”,“if(data.track.length> 0)”将引发错误。这可以通过“if(data & & data.track & & data.track.length> 0)”来解决。
  2. 我想不出一个更好的方法。我会在功能上分解更多,以使代码更清晰。