我正在使用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.");
}
}
有什么想法吗?任何回复都表示赞赏。
答案 0 :(得分: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);
});
};
答案 1 :(得分:3)
来自node_redis自述文件:
<强> client.hgetall(散列)强>
HGETALL命令的回复将转换为JavaScript 对象by node_redis。这样您就可以与响应进行交互 使用JavaScript语法。
我不知道nowjs究竟是如何处理传递JavaScript对象的,但您可以尝试JSON.stringify
从服务器端res
返回的hgetall
,然后看看你是否在客户端上获取JSON字符串。如果是,那么只需将其解析回JavaScript对象,以便在客户端使用它。