Как обработать результат от hgetall () в nodejs (nowjs)? - PullRequest
0 голосов
/ 05 августа 2011

Я использую redis + nowjs.Я хотел бы знать, как обрабатывать результат из hgetall ()?Когда я пытаюсь отобразить «результат» на стороне клиента, я получаю только [объект 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 (предупреждение только выводит [объект объекта])

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

Есть идеи?Любой ответ приветствуется.

Ответы [ 2 ]

5 голосов
/ 06 августа 2011

при использовании hgetall вы возвращаете массив объектов обратно. В зависимости от сценария это может быть обработано так:

getItems = function(callback){   
    client.hgetall("myhash",function(err, res){
         var items = [];
         for (i in res) {
            items.push(JSON.parse(res[i]));
         }
     callback(items);
     });    
};
3 голосов
/ 05 августа 2011

Из файла read_redis узла:

client.hgetall (хэш)

Ответ от команды HGETALL будет преобразован в JavaScript Объект по node_redis. Таким образом, вы можете взаимодействовать с ответами используя синтаксис JavaScript.

Я не знаю, как именно nowjs обрабатывает передачу объектов JavaScript, но вы можете попробовать JSON.stringify res, возвращенный из hgetall на стороне сервера, а затем посмотреть, получите ли вы строку JSON на клиенте , Если да, то просто проанализируйте его обратно в объект JavaScript, чтобы работать с ним на стороне клиента.

...