2012-04-04 78 views
1

我有以下express node.js應用程序。它使用'redis'npm軟件包。nodejs express應用程序不會返回json數組

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); 

代碼運行沒有錯誤;但是,返回到瀏覽器時,data變量爲[]browser

奇怪的部分是,當我從命令行運行相同的redis命令時,數組被填充。

enter image description here

誰能告訴我這是怎麼回事?

回答

9

您的代碼是異步的。您通過的回調沒有得到執行,直到您的console.log。嘗試:

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); 
    }); 
}); 
+0

Doh!我覺得是這樣的。本來我只是在做'res.send(data)',我試着把它放在回調中。但既然那是錯的,我也沒有看到那是解決方案。謝謝! – 2012-04-04 22:51:10

+0

@MattPhillips,第一種方法應該工作得很好!? – davin 2012-04-04 22:56:49

+0

所以你可以做res.send並傳遞json,它會正確設置標題?我發誓它沒有工作。 – 2012-04-04 23:00:04

相關問題