redis客户端和节点js – hgetall方法失败,结果为空

对于我来说,这是第一天使用redis cilent和node js。

我试图复制这个命令,我通过node.js中的redis-cli运行:

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); }); }); 

它返回null,然后尝试做foreach时失败。

我也试过:

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

但是我得到了同样的结果。

不知道我在做什么错。

编辑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> 

hgetall的回复是Objecttypes,请尝试在代码中添加以下行

 console.log(replies.id); 

您将在控制台中打印33305。

我试图复制你正在做的事情。 我会首先检查你是否连接到正确的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]}`); } });