Vigikaran February 2016

node with express js for each loop

I'm using express with node for my rest api, I need to run a for loop to determine the output json. my route file looks

var Redis = require('ioredis')
var redis = new Redis({
    port: 6379,
    host: '127.0.0.1',
    family: 4,
    password: 'password',
    db: 0
});

var Jsonresult = {};
var process = function(lat,lon,dist,unit)
{
    Jsonresult.result = 'success';
    var vehicle_type = new Array('small','medium');  
    vehicle_type.forEach(function(vehicle, index, arr) 
    {
        redis.georadius ( vehicle,lat,lon ,dist,unit,'WITHCOORD','WITHDIST',function( ERR , Result ) 
        {
            if (ERR) 
            {
                console.log(ERR);
            }

            Jsonresult[vehicle] = Result;
        }) ;
    })

    return Jsonresult;
}

router.get('/:lat/:lon/:dist/:unit', function(req, res, next) {
    var lat = req.params.lat;
    var lon = req.params.lon; 
    var dist = req.params.dist;
    var unit = req.params.unit;
    res.json(process(lat,lon,dist,unit));
});

module.exports = router;

and my expected json output is

{"result":"success","small":[["driver_1","0.2779",["56.507199704647064","-0.12500104133338397"]],["driver_2","0.2782",["56.50730162858963","-0.12500104133338397"]]],"medium":[]}

but i'm getting only

{"result":"success"}

whats wrong in the code ?

Answers


narainsagar February 2016

this way:

vehicle_type.forEach(function(vehicle, index, arr) {
   Jsonresult[vehicle] = true;
})

and pass result in response as well when calling res.json()..

res.json(Jsonresult);


Vigikaran February 2016

vehicle_type.forEach(function(vehicle) 
{
    calls.push(function(callback){
        redis.georadius ( vehicle,lat,lon ,dist,unit,'WITHCOORD','WITHDIST',  function  ( ERR , Result ) 
        {
            if (ERR) 
            return callback(ERR);  

            Jsonresult[vehicle] = Result;
            callback(null, vehicle);


        });


      });
});

async.parallel(calls, function(err, result) {
if (err)
    return console.log(err);
res.json(Jsonresult);
 });

This finaly solve my problem: answer here

Post Status

Asked in February 2016
Viewed 1,973 times
Voted 9
Answered 2 times

Search




Leave an answer