2012-04-04 7 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)'をやっていて、コールバックの中に入れてみました。しかしそれは間違っていたので、私はそれが解決策であるとは思わなかった。ありがとうございました! –

+0

@MattPhillips、そ​​の最初のメソッドはちょうどうまくいったはずです! – davin

+0

ですので、res.sendを実行してjsonを渡すと、ヘッダーが正しく設定されますか?私はそれが動作していないことを誓う。 –

関連する問題