Matt Phillips
Matt Phillips

Reputation: 11519

nodejs express application won't return json array

I have the following express node.js app. It's using the 'redis' npm package.

app.get("/test",function(req,res){
    var data = [];
    client.HGETALL("receipts",function(err,obj){
        for(var id in obj){
            data.push(JSON.parse(obj[id]));
        }
    });
    console.log(data);
    res.json(data);
});

app.listen(3000);

The code run's without errors; however, the data variable is [] when it's returned to the browser. browser

The strange part is that when I run the same redis commands from the command line, the array is populated.

enter image description here

Can anyone tell me what's going on here?

Upvotes: 1

Views: 14812

Answers (1)

davin
davin

Reputation: 45545

Your code is asynchronous. The callback you pass doesn't get executed until after your console.log. Try:

app.get("/test",function(req,res){
    var data = [];
    client.HGETALL("receipts",function(err,obj){
        for(var id in obj){
            data.push(JSON.parse(obj[id]));
        }
        console.log(data);
        res.json(data);
    });
});

Upvotes: 10

Related Questions