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 自述文件:

客户端.hgetall(哈希)

HGETALL 命令的回复将由 node_redis 转换为 JavaScript 对象。这样您就可以使用 JavaScript 语法与响应进行交互。

我不知道 nowjs 究竟是如何处理传递的 JavaScript 对象的,但是您可以尝试JSON.stringify从服务器端res返回hgetall,然后查看是否在客户端获得 JSON 字符串。如果是,那么只需将其解析回 JavaScript 对象,以便在客户端使用它。

于 2011-08-05T16:08:39.330 回答