【问题标题】:How to handle a result from an hgetall() in nodejs (nowjs)?如何处理nodejs(nowjs)中hgetall()的结果?
【发布时间】:2011-08-06 19:18:52
【问题描述】:

我正在使用 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中(alert只输出[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.");
    }
}

有什么想法吗?任何答复表示赞赏。

【问题讨论】:

  • 不要在console.log中使用+,直接在对象上使用console.logconsole.dir
  • @Raynos 谢谢!我为“卡片数据”放置了加号:“ - 这样我就可以轻松地发现 Firebug 中的特定日志,因为控制台中还有其他代码行记录......当我使用时是否有任何我不知道的问题a + "plus"?我认为它会将对象转换为字符串?如果是这样,那么我可能应该使用 + 大声笑...再次感谢!
  • 你在做字符串连接。这意味着您在对象上隐式调用toString。基本上,控制台比toString 方法更擅长记录数据。请改用console.log("card data: ");console.log(card_data);

标签: node.js redis nowjs-sockets


【解决方案1】:

使用 hgetall 时,您会返回一组对象。根据场景,可以这样处理:

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

【讨论】:

    【解决方案2】:

    来自 node_redis 自述文件:

    client.hgetall(hash)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 2020-05-08
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 2014-04-02
      相关资源
      最近更新 更多