2011-08-05 24 views
0

私はredis + nowjsを使用しています。 hgetall()の結果を処理する方法を知りたいですか? "result"をクライアント側で表示しようとすると、私は[object Object]を取得します(これはおそらくサーバー側のjsからの文字列です)。nodejs(nowjs)のhgetall()の結果をどのように扱うか?

// Redisの結果は私のクライアントのjs(警告だけ出力[対象オブジェクト])

now.receiveShowRedisCard = function(card_data) { 
    alert("redis card: "+card_data); 
    try { 
     console.log('card data: '+ card_data); 
    } catch(e) { 
     console.log("Firebug not installed."); 
    } 
} 
で私のサーバーの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); 
    }); 
} 

//で

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> 

//です

アイデアすべての返信は高く評価されます。 node_redisのreadmeから

+0

'console.log'で' + 'を使わないでください。オブジェクトに対して直接' console.log'または 'console.dir'を使用してください。 – Raynos

+0

@Raynosありがとう!私は「カードデータ」のプラス記号をつけました: - コンソールに他のコード行が記録されているので、Firebugの特定のログを簡単に見つけることができます...私が使用するときに気づいていない問題はありますか? + + "plus"?オブジェクトを文字列に変換すると思っていますか?そうすれば、おそらく+ lolを使用していたはずです...もう一度おねがいします! – wenbert

+1

あなたのやり方は文字列連結です。 toString'メソッドを使用してください。基本的に、コンソールは 'toString'メソッドの後にデータを記録する方が良いです。' console.log( "card data:"); console.log(card_data); ' – Raynos

答えて

3

client.hgetall(ハッシュ)

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

私はnowjs JavaScriptオブジェクトを渡して処理しているかを正確に知りませんが、あなたはサーバー側でhgetallから返さJSON.stringifyresに試してみて、あなたがクライアント上でJSON文字列を取得する場合、次に見ることができます。もしそうであれば、それを解析してJavaScriptオブジェクトに戻し、クライアント側でそれを処理します。

5

hgetallを使用すると、オブジェクトの配列が戻されます。シナリオによっては、次のように扱うことができます:

getItems = function(callback){ 
    client.hgetall("myhash",function(err, res){ 
     var items = []; 
     for (i in res) { 
      items.push(JSON.parse(res[i])); 
     } 
    callback(items); 
    });  
}; 
関連する問題