Javascript 如何在nodejs中处理同一get函数的多个调用?
使用Ajax调用,我每10秒调用一次下面的get函数,以便监视一些URL的状态Javascript 如何在nodejs中处理同一get函数的多个调用?,javascript,node.js,ajax,Javascript,Node.js,Ajax,使用Ajax调用,我每10秒调用一次下面的get函数,以便监视一些URL的状态 app.get('/getUrl', function(req, res) { var response = {}; var keyArr = []; var urlData = []; var responses = []; var dataArr = []; var ke
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中,我将获得所有URL的列表,并获得所有URL的长度或计数
2) 在push host函数中,我推送所有的keyvalues,这是该URL的主机名。因此,在keyArrLength中有URL的总数,而keyArr有所有主机名的列表,即keys
3) 然后我调用next()
4) 在next()中,我对每个url进行请求调用,并将数据作为对象的形式存储在数组allResponses[]
中
5) 如果它进入错误处理程序,我将把结果附加到allResponses[]
6) 我将通过分配直到最后一个url
index=0 in the beginning and incrementing in each loop
7) 当我每10秒调用一次这个函数时,它工作得很好
8) 但是当我刷新页面时,这个getUrl
将被调用,并且它已经在执行了,因为这个调用每10秒进行一次。所以它们都会碰撞,结果会重复
我对nodejs是新手。我不知道我是否做得很好,或者有没有更好的方法打这些电话
我想知道,即使我刷新页面任意次数,我希望这个函数按顺序执行。如果最近一次通话中断了前一次通话,我需要终止前一次通话并从最近一次通话开始
非常感谢你阅读这篇文章!如果可能的话,请帮忙!建议您是否知道更好的方法。提前感谢。最后我发现了问题。上面的代码很好。问题是我没有将var
添加到此hostname=data代码>并因此存储上一个值。这就是问题所在。最终我发现了问题所在。上面的代码只是很好。问题是我没有将var
添加到此hostname=data代码>并因此存储上一个值。这就是问题所在