1

これは、私にとって redis cilent とノード 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> 
4

3 に答える 3

1

hgetall の応答は Object 型です。コードに次の行を追加してみてください

console.log(replies.id);

コンソールに 33305 を出力します。

于 2016-09-13T13:43:46.277 に答える
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]}`);
        }
});
于 2016-09-12T22:32:41.500 に答える