使用redis和node.js问题:为什么Redis.get返回false?

dluptydi  于 2023-05-21  发布在  Redis
关注(0)|答案(5)|浏览(202)

我正在运行一个由node.js支持的简单web应用程序,我试图使用redis来存储一些键值对。我所做的就是在命令行上运行“node index.js”,下面是index.js的前几行:

var app = require('express').createServer();
var io = require('socket.io').listen(app);

var redis = require('redis');
var redis_client = redis.createClient();
redis_client.set("hello", "world");
console.log(redis_client.get("hello"));

然而,我得到的redis_client.get("hello")而不是"world"false。为什么不返回"world"
(And我正在运行redis-server)
奇怪的是,发布的示例代码here运行良好,并产生预期的输出。对于简单的setget,我是否做错了什么?

dauxcl2d

dauxcl2d1#

我敢打赌get是异步的,所以你可以通过回调来获取值。

g6ll5ycj

g6ll5ycj2#

给你!对于ES6**

redis_client.get("hello", (err, data)=>{
  if(err){
    throw err;
  }
  console.log(data);
});

对于ES 5

redis_client.get("hello", function(err, data){
  if(err){
    throw err;
  }
  console.log(data);
});
lawou6xi

lawou6xi3#

这可能会帮助那些讨厌使用回调的人:
只需在不使用外部库的情况下,通过执行以下操作来实现它:

new Promise((resolve, reject) => {
  redis_client.get("hello", (e, data) => {
    if(e){
      reject(e);
    }
    resolve(data);
  });
});
bfnvny8b

bfnvny8b4#

现在,Redis使用promises API。

const redis = require("redis"); // 4.0.1
const redisClient = redis.createClient();

(async () => {
  await redisClient.connect();
  await redisClient.set("hello", "world");
  console.log(await redisClient.get("hello")); // => world
  await redisClient.quit();
})();
bzzcjhmw

bzzcjhmw5#

有同样的问题,通过使用promisify解决了它。

const redis = require('redis');
const util = require('util');
const redisUrl ="redis://127.0.0.1:6379";
const client = redis.createClient(redisUrl);

client.set = util.promisify(client.set)

client.get = util.promisify(client.get);

const setRed =async ()=>{
    await client.set('name','Jo');
    let name = await client.get('name');
//prints the value for name
    console.log(name);
}

setRed();

相关问题