2016-09-27 37 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. 我想不出一個更好的方法。我會在功能上分解更多,以使代碼更清晰。