I'm working on NodeJS for event capturing purpose. All the calls will be coming to getme function. From this function I'm calling getUserLocation() function which return Geolocation based on ip. How can I updated Global variable based on this values?
var getClientAddress = function (req) {
return (req.get('x-forwarded-for') || '').split(',')[0] || req.connection.remoteAddress;
}
var getClientLocation = function (ipaddress, callback) {
freegeoip.getLocation(ipaddress, function(err, location) {
if (err) throw err;
return callback(location);
});
}
var store = [{'hello': 'world', 'country': 'India', 'City': 'Indupur'}];
for (eve=0;eve<store.length;eve++){
if(!store[eve].lat){
clientIp = getClientAddress(req);
getClientLocation("XXX:XX:XX:XXX", function(resp) {
console.log(resp);
store[eve].country = store[eve].country || resp.country_name;
store[eve].region = store[eve].region || resp.region_name;
store[eve].city = store[eve].city || resp.city;
store[eve].lat = store[eve].lat || resp.latitude;
store[eve].lng = store[eve].lng || resp.longitude;
});
}
But store is not accessible. It is undefined. How can I update store?
Actual Code: Here is the actual code :
https://github.com/Gowtham95india/CapVengine/blob/master/server.js
Here is the error message:
Server started! At http://localhost:8080
Redis started! Ready to perform
{ e: '[{"device_id":"dsfkdjf-dsfdls-fejfskj-e2oiej2j3jf","user_id":2124,"email":"gowtham95india@gmail.com","event_properties":{"utm_source":"HelloWorld"}, "lat":""}]',
v: 2 }
2017-02-11T09:02:10.838Z
{ ip: '121.244.122.142',
country_code: 'IN',
country_name: 'India',
region_code: 'MH',
region_name: 'Maharashtra',
city: 'Phursungi',
zip_code: '412308',
time_zone: 'Asia/Kolkata',
latitude: 18.4667,
longitude: 73.9833,
metro_code: 0 }
/Users/GowthamSai/Documents/repo/capeve/server.js:111
store[eve].country = store[eve].country || resp.country_name;
^
TypeError: Cannot read property 'country' of undefined
at /Users/GowthamSai/Documents/repo/capeve/server.js:111:48
at /Users/GowthamSai/Documents/repo/capeve/server.js:36:16
at Request._callback (/Users/GowthamSai/Documents/repo/capeve/node_modules/node-freegeoip/lib/freegeoip.js:25:16)
at Request.self.callback (/Users/GowthamSai/Documents/repo/capeve/node_modules/request/request.js:187:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (/Users/GowthamSai/Documents/repo/capeve/node_modules/request/request.js:1048:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (/Users/GowthamSai/Documents/repo/capeve/node_modules/request/request.js:969:12)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)