Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript redis客户端和节点js-hgetall方法失败,结果为空_Javascript_Node.js_Redis_Redis Cli_Redisclient - Fatal编程技术网

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

Javascript redis客户端和节点js-hgetall方法失败,结果为空,javascript,node.js,redis,redis-cli,redisclient,Javascript,Node.js,Redis,Redis Cli,Redisclient,这是我使用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", functio

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

我应该在哪里检查redis客户端中的此特定方法是否返回对象?只是请求将来的参考来帮助我自己。这是我一直在使用的参考资料。。。这是非常有限的:顺便说一句,我尝试了这段代码,但它没有返回任何结果。没有错误,但没有打印。只是看起来你没有正确连接。我认为您应该阅读,它将告诉您如何连接到您的redis实例正在侦听的端口。至于知道函数返回什么,我认为您应该看看redis本身的文档。在这里,因为您正在调用hgetall,所以您将返回一个哈希值,该哈希值转换为JavaScriptConsole.log(replies)打印的对象是什么?它返回null.client.hgetall(“widgets:9145090003_00:00_00:00”,redis.print),这表示“Reply:null”尝试添加client=redis.createClient('6379','127.0.1');如果还没有,也可以在节点服务器运行时在redis中查看客户端列表,检查是否可以正确连接