NodeJS无法连接到Redis

eaz*_*bob 4 redis node.js

我有需要连接到 Redis 数据库的 nodejs 应用程序。但是,当尝试连接到 Redis 时,它总是返回“ false ”。我在可从 cli 访问的同一台机器上运行 Redis 实例,还有另一个 nodejs 应用程序连接到同一个 Redis 实例。

我在 /var/log/redis/redis-server.log 中没有看到任何错误,也没有在控制台中打印出来。

任何想法可能是什么问题?

$ nodejs -v v8.11.1

$redis-server -v Redis 服务器 v=4.0.9 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=1bc80a08306a3efd

const redis = require('redis'),
redisClient = redis.createClient(6379, '127.0.0.1');

const REDIS_USER_DATA_INDEX = 2;

redisClient.select(REDIS_USER_DATA_INDEX);

redisClient.on('connect', function () {
    console.log('redis connected');
}).on('error', function (error) {
    console.log(error);
});

console.log(`connected ${redisClient.connected}`);
Run Code Online (Sandbox Code Playgroud)

编辑 我在两个 redisClient.on() 回调中都没有收到任何事件

Eli*_*aza 11

redis 的 connect() 函数是一个异步函数。您必须解决该承诺才能使用该连接。

下面的代码应该可以工作:

const redis = require("redis");

let redisPort = 6379;  // Replace with your redis port
let redisHost = "127.0.0.1";  // Replace with your redis host
const client = redis.createClient({
    socket: {
      port: redisPort,
      host: redisHost,
    }
  });

(async () => {
    // Connect to redis server
    await client.connect();
})();


console.log("Attempting to connect to redis");
client.on('connect', () => {
    console.log('Connected!');
});

// Log any error that may occur to the console
client.on("error", (err) => {
    console.log(`Error:${err}`);
});

// Close the connection when there is an interrupt sent from keyboard
process.on('SIGINT', () => {
    client.quit();
    console.log('redis client quit');
});
Run Code Online (Sandbox Code Playgroud)


小智 5

基本上,您正在调用 redisClient.on(),这是一个异步函数,并且您在回调函数之外输出连接状态,由于 redis 仍未连接,该函数肯定返回 false。我建议将您的代码放在回调函数中。试试下面给出的代码:

    const redis = require('redis'),
redisClient = redis.createClient(6379, '127.0.0.1');

const REDIS_USER_DATA_INDEX = 2;

redisClient.select(REDIS_USER_DATA_INDEX);

redisClient.on('connect', function () {
    console.log('redis connected');
    console.log(`connected ${redisClient.connected}`);
}).on('error', function (error) {
    console.log(error);
});
Run Code Online (Sandbox Code Playgroud)

如果您有任何问题,请告诉我。谢谢