使用Ajax调用我每10秒调用一次下面的get函数,以便我可以监视某些URL的状态。
app.get('/getUrl', function(req, res) {
var response = {};
var keyArr = [];
var urlData = [];
var responses = [];
var dataArr = [];
var keyArrLength;
//Listing All the URLS
db.list(function(err, data) {
keyArrLength = data.rows.length;
dataArr = data.rows;
console.log("keyArrLength" + keyArrLength);
pushHost();
});
//Getting the key ie HOSTNAMES
function pushHost() {
dataArr.forEach(function(arrayItem) {
var host = arrayItem.key;
keyArr.push(host);
console.log("Array of hosts" + keyArr);
});
next(0); //Calling the main function
}
var urlResults = [];
var allResponses = [];
// Getting the Hostname and URL
function next(index) {
if (index === keyArrLength) { // No items left
res.end(JSON.stringify(allResponses));
return;
} else { //Getting one URL at a time
db.get(keyArr[index], function(err, data) {
currentUrl = data.url;
hostname = data._id;
var options = {
url: "https://" + currentUrl,
strictSSL: false,
method: 'GET'
};
//Requesting data for that one URL
request(options, function(error, response, body) {
if (!error && response.statusCode == 200) {
var response = {};
response.body = JSON.parse(body);
response.hostname = hostname;
allResponses.push(response); //Pushing the data to final result
} else if (error || response.statusCode != 200) {
var response = {};
//Appending error results when it enters error handler
response.body = {
"servicesStatus": [{
"name": "name1",
"active": false
}, {
"name": "name2",
"active": false
}, {
"name": "name3",
"active": false
}],
}
response.hostname = hostname;
allResponses.push(response); //pushing data
}
next(index + 1); //Calling recursively till the last URL
});
});
};
}
});
1)在db.list i'm getting the list of all the URL's
中获取所有网址的长度或计数。
2)在推送主机功能中,我推送所有的键值,即该URL的主机名。所以,在keyArrLength has the total number of URLS and keyArr has the list of all the hostnames i.e keys
。
3)然后我调用next()
4)在next()中,我为每个网址发出请求,并将数据存储为form of object in an array allResponses[]
。
5)如果它进入错误处理程序,我将结果附加到allResponses[]
6)我通过分配
来呼叫到最后一个网址 index=0 in the beginning and incrementing in each loop
7)当我每隔10秒调用一次此功能时,IT工作正常。
8)但是当我刷新页面时,将调用此getUrl
,并且它将一直在执行,因为此调用每10秒进行一次。所以他们都碰撞了,反复重复了。
我是nodejs的新手。我不知道我是否正常运作,或者有更好的方法可以进行这些通话。
我想知道即使我刷新页面任何次数,我希望这个功能按顺序执行。如果最新的呼叫中断了前一个呼叫,我需要终止上一个呼叫并从最新呼叫开始。
非常感谢您阅读本文!请尽可能帮忙!建议你是否知道更好的方法。谢谢。
答案 0 :(得分:0)
最后我发现了这个问题。上面的代码很好。问题是我没有将var
添加到此hostname = data._id;
,因此它存储了之前的值。那就是问题。