2

redis+nowjsを使っています。hgetall() の結果を処理する方法を知りたいですか? クライアント側で「結果」を表示しようとすると、[object Object] しか表示されません (おそらくサーバー側の js からの文字列です)。

//Redisの結果は

redis> HSET cards:lightning-bolt name "Lightning Bolt"
(integer) 1
redis> HSET cards:lightning-bolt text "Blah blah blah"
(integer) 1
redis> HGETALL cards:lightning-bolt
1) "name"
2) "Lightning Bolt"
3) "text"
4) "Blah blah blah"
redis>

//私のサーバーjsで

everyone.now.signalShowRedisCard = function(card_id) {
    var self = this;
    client.hgetall(("cards:%s" % card_id), function (err, res) {
        nowjs.getGroup(self.now.room).now.receiveShowRedisCard(res);
    });
}

//私のクライアント js では (アラートは [object Object] を出力するだけです)

now.receiveShowRedisCard = function(card_data) {
    alert("redis card: "+card_data);
    try {
      console.log('card data: '+ card_data);
    } catch(e) {
      console.log("Firebug not installed.");
    }
}

何か案は?どんな返信でも大歓迎です。

4

2 に答える 2

6

hgetall を使用すると、オブジェクトの配列が返されます。シナリオに応じて、次のように処理できます。

getItems = function(callback){   
    client.hgetall("myhash",function(err, res){
         var items = [];
         for (i in res) {
            items.push(JSON.parse(res[i]));
         }
     callback(items);
     });    
};
于 2011-08-06T11:18:52.403 に答える
4

node_redis readme から:

client.hgetall(ハッシュ)

HGETALL コマンドからの応答は、node_redis によって JavaScript オブジェクトに変換されます。そうすれば、JavaScript 構文を使用して応答を操作できます。

nowjs が渡された JavaScript オブジェクトを正確にどのように処理しているかはわかりませんが、サーバー側から返されたJSON.stringifyを試してから、クライアントで JSON 文字列を取得するかどうかを確認できます。はいの場合は、それを解析して JavaScript オブジェクトに戻して、クライアント側で操作します。reshgetall

于 2011-08-05T16:08:39.330 に答える