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

redis client and node js - hgetall method fails with empty results

本文关键字:失败 结果 方法 hgetall 客户端 节点 js Redis      更新时间:2023-09-26

这是我使用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时失败。

i also tried:

 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的回复是Object类型,尝试在代码中添加以下行

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

对于使用async/await的开发人员:不要忘记在方法从Redis返回值之前添加await,否则你会得到一个空数组/集。

的例子:

 await this.client.zRange('test_queue', '0', '100')