使用Node.js成功发出http请求后记录图像

时间:2016-09-27 09:58:39

标签: javascript json node.js logging httprequest

我正在创建一个脚本,每秒向摄像机网络的本地服务器发出2次请求,并且在得到肯定响应后摄像机检测到某人我要记录三个图像。

在json配置文件中,我有服务器的 triggerURL 间隔端口, dataDir ,其中应保存已记录的图像,一个曲目数组,其中包含这些图片的网址以及他们应该收到的 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. 有没有更好的方法来完成这个过程?

1 个答案:

答案 0 :(得分:0)

  1. 不运行代码或更深入的检查;不应该“data = JSON.parse(response)”而是“data = JSON.parse(content)”?此外,如果数据未定义或不包含“track”,则“if(data.track.length> 0)”将引发错误。这可以通过“if(data&& data.track&& data.track.length> 0)”修复。
  2. 我想不出更好的方法。我会在函数中更多地分解它,以使代码更清晰。