Redis键表示为字符串,而不是对象

时间:2017-09-27 12:41:25

标签: node.js redis

我想从nodejs获取Redis会话的数据 - 但是我无法获得对象的内部值....

这是一个简单的路由器

      router.get('/page-user', function (req, res) {

      console.log(redis_model.prototype.getAll());


      })

这是模型

  redis_model.prototype.getAll = function () {

    client.keys('*', function (err, keys) {
    if (err) return console.log(err);

    for(var i = 0, len = keys.length; i < len; i++) {
        console.log(keys[i]);
       }
     });
   };

所以我得到了

 users
 id:users
 session:php:cf5myWFkDNEPwiRLpi6M1P6LqX1UPFtj //object
 user:{58}

我正在尝试从会话密钥中获取数据,而我正在获取Undefined,如下所示:

redis_model.prototype.getAll = function () {

 client.keys('*', function (err, keys) {
    if (err) return console.log(err);
        console.log(keys['session']);  // tried also keys.session

});
};

我无法弄清楚的部分是为什么我为所有键获得Type String - 就像这里:

redis_model.prototype.getAll = function () {

    client.keys('*', function (err, keys) {
    if (err) return console.log(err);


        console.log(typeof keys[i]); result : //string,string, string,string

   });
};

我已经尝试过HGETALL来获取键作为对象,但我仍然未定义:

  redis_model.prototype.getAll = function () {

    client.hgetall("session",function(data){console.log(data)});
  };

以下是redis db的截图...

enter image description here

2 个答案:

答案 0 :(得分:0)

Client.keys("*",function(err,keys){})

这只返回redisDB中存在的所有键,基本上都是字符串

相反,您可以使用

  

client.get(&#39;键&#39;,功能(ERR,数据){})

为了将结果作为对象获取,它应该存储为散列,即

client.hmset("session",{'php':'cf5myWFkDNEPwiRLpi6M1P6LqX1UPFtj'}
client.hgetall("session",function(data){console.log(data.php)})

上面的代码为您提供了分配给php的值。

答案 1 :(得分:0)

得到它......

redis_model.prototype.getAll = function () {

client.get('session:php:VfAPTh_NLpBrcq3VGHTC8uT7c-sF4bQd', function(err, 
 result){
    var foo = (JSON.parse(result))['user'];
    console.log( foo);
  });
};