我正在创建一个脚本,每秒2次向摄像机网络的本地服务器发出请求,并且在它得到积极响应后,摄像机检测到有人我想记录三个图像。
在json配置文件中,我有服务器的triggerURL, 间隔端口,日志图像应该保存的dataDir和包含这些图像的url和文件名的跟踪数组。
这是我在阅读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);
});
我有以下问题:
此方法会在下载图像的过程中产生某种错误。你能认出来吗?
有没有更好的方法来完成这个过程?
- 不运行代码或不进行更深入的检查;不应该"数据= JSON.parse(响应)"而不是"数据= JSON.parse(内容)"?此外,如果数据未定义或不包含"track",则"if (data.track.)"长度> 0)"将抛出错误。这可以使用"if (data &&数据。跟踪,,data.track.length> 0)". 我想不出更好的办法了。我会把它分解成函数,让代码更清晰。