2016-09-12 2 views
1

Это первый день для меня с redis cilent и узлом js.redis клиент и узел js - метод hgetall с пустым результатом

Я пытаюсь повторить эту команду, я бегу через Redis-Cli в Node.js:

127.0.0.1:6379> HGETALL widgets:9145090003_00:00_00:00 
1) "id" 
2) "33305" 
3) "loc" 
4) "jamaica" 
5) "days" 
6) "" 

Вот код nodejs:

client.hgetall("widgets:9145090003_00:00_00:00", function (err, replies) { 
     console.log(err); 
     replies.forEach(function (reply,i) { 
       console.log(' ' + i + ':' + reply); 
     }); 
}); 

Он возвращается нуль, а затем сбой при попытке сделать foreach.

я также пытался:

client.hgetall("widgets", function (err, replies) { 
      console.log(err); 
      replies.forEach(function (reply,i) { 
        console.log(' ' + i + ':' + reply); 
      }); 
    }); 

Но я получаю тот же результат.

Не уверен, что я делаю неправильно.

EDIT 1

Я попробовал этот код:

17 console.log("attempting to do hgetall.."); 
18 client.hgetall("widgets:9145090003_00:00_00:00", function (err, replies) { 
19   //for (let k in replies) console.log(' ${k}:${replies[k]}'); 
20   console.log(replies.id); 
21 }); 

И вот результаты:

/var/www/html/node/test/models/Widgets.js:20 
    console.log(replies.id); 
        ^

TypeError: Cannot read property 'id' of null 

И все же, в CLI я могу это сделать:

127.0.0.1:6379> HGET widgets:9145090003_00:00_00:00 id 
"33305" 
127.0.0.1:6379> HGETALL widgets:9145090003_00:00_00:00 
1) "id" 
2) "33305" 
3) "loc" 
4) "jamaica" 
5) "days" 
6) "" 
127.0.0.1:6379> 

ответ

1

Ответное hgetall имеет тип Object, попробуйте добавить следующую строку в код

console.log(replies.id); 

и вы будете печатать 33305 в консоли.

+0

, это возвращает ошибку. См. Редактировать 1 – Happydevdays

+0

Что делает console.log (отвечает) печатать? – marvel308

+0

это возврат null. – Happydevdays

0

Я пытался воспроизвести то, что вы делали. Сначала я проверил бы, если вы подключаетесь к правильному экземпляру redis. Если это так, проблема в том, что функция forEach работает для массивов, но ответы здесь - это объект, и нет функции Object.prototype.forEach. Вам придется перебирать ответ по-другому. Я переписал ваш код таким образом, который должен работать, если вы подключены к правильному экземпляру redis.

client.hgetall("widgets:9145090003_00:00_00:00", function (err, replies) { 
     console.log(replies); 
     for(let k in replies) { 
      console.log(` ${k}:${replies[k]}`); 
     } 
}); 
+0

Где я должен был проверить, чтобы увидеть, что этот конкретный метод в redis-клиенте возвращает объект? просто спрашивая о будущей ссылке, чтобы помочь себе. это ссылка, которую я использовал ..., которая очень ограничена: https://www.npmjs.com/package/redis – Happydevdays

+0

и btw, я пробовал этот код, но он ничего не возвращает. Нет ошибок, но ничего не печатает. – Happydevdays

+0

похоже, что вы неправильно подключаетесь. Я думаю, вы должны прочитать [это перед продолжением] (https://github.com/NodeRedis/node_redis#rediscreateclient), он расскажет вам, как подключиться к порту, на котором прослушивается ваш экземпляр redis. Что касается понимания того, что возвращает функции, я думаю, вы должны посмотреть на документацию для самого redis. Здесь, поскольку вы вызываете hgetall, вы будете возвращать хеш, который переводится в объект в javascript –