2011-08-05 18 views
0

我正在使用redis + nowjs。 我想知道如何去處理hgetall()的結果? 當我嘗試在客戶端顯示「結果」時,我只得到[object Object](它可能是服務器端js中的一個字符串)。如何處理nodejs(nowjs)中hgetall()的結果?

// 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(警報輸出剛[對象的對象])

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

任何想法?任何答覆表示讚賞。

+0

不要在'console.log'中使用'+',只需在對象上直接使用'console.log'或'console.dir'。 – Raynos

+0

@Raynos謝謝!我放置了'card data:'的加號 - 因此,我可以很容易地發現Firebug中的特定日誌,因爲在控制檯中有其他代碼行日誌記錄...有沒有我在使用時不知道的任何問題a +「plus」?我在想它將對象轉換爲一個字符串?如果是這樣,那麼我可能應該使用+ lol ...再次感謝! – wenbert

+1

你的字符串串聯,這意味着你實際調用' toString' on the object。基本上,控制檯最好記錄數據,然後是'toString'方法,使用'console.log(「card data:」); console.log(card_data);'改爲 – Raynos

回答

3

從node_redis自述:

client.hgetall(散列)

從HGETALL命令的應答將被轉換成由node_redis一個JavaScript 對象。這樣,您可以使用JavaScript語法與響應 進行交互。

我不知道究竟是nowjs處理通過JavaScript對象,但你可以嘗試JSON.stringifyreshgetall在服務器端返回,然後看看你的客戶端上的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); 
    });  
};