I was trying to generate multiple url/pages using node.js express. I have multiple (currently 10 but the number may change) urls stored in one JSON file and I have another 10 (bound to change) JSON files that contain the information for each url respectively.
Currently I am using request-json to get the JSON file from a local server. However, my codes only allow me to create the very last url and its content in the loop
client.get("url1", function(error, response, body){
for (var i=0; i<10; i++){
var urlName = body.row[i];
client.get("url2" + urlName, function(error, response, body) {
app.get('/'+ urlName, function (req, res){
res.send(body);
})
})
}
});
I think It's because there is a async call in for loop. You are saying use current value of i or urlName in a async function app.get.
And app.get will be called when client.get will finished.
So when it will be called your for loop will be finished so it will call with latest value of i/urlName which will be your last row i=10. So it goes for that.
try this:-
var performCurrentOperation = function(i,body){
var urlName = body.row[i];
client.get("url2" + urlName, function(error, response, body) {
app.get('/'+ urlName, function (req, res){
res.send(body);
});
});
}
client.get("url1", function(error, response, body){
for (var i=0; i<10; i++){
performCurrentOperation(i,body);
}
});
Basically here what I am doing I've bind a function with that value of i so it should perform operation on current value of i.