redis 客户端和节点 js - hgetall 方法失败,结果为空
redis client and node js - hgetall method fails with empty results
今天是我使用 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>
我试图复制你在做什么。我会首先检查您是否连接到正确的 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]}`);
}
});
hgetall 的回复是 Object 类型,尝试在您的代码中添加以下行
console.log(replies.id);
您将在控制台中打印 33305。
对于使用 async/await
的开发者:
不要忘记在从 Redis 返回值的方法之前添加 await
否则你将得到一个空的 array/set.
示例:
await this.client.zRange('test_queue', '0', '100')
今天是我使用 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>
我试图复制你在做什么。我会首先检查您是否连接到正确的 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]}`);
}
});
hgetall 的回复是 Object 类型,尝试在您的代码中添加以下行
console.log(replies.id);
您将在控制台中打印 33305。
对于使用 async/await
的开发者:
不要忘记在从 Redis 返回值的方法之前添加 await
否则你将得到一个空的 array/set.
示例:
await this.client.zRange('test_queue', '0', '100')