Node-Redis:准备检查失败-需要NOAUTH身份验证

Ent*_*per 3 redis node.js node-redis

我有一个奇怪的redis行为:

const redis = require('redis');
const { REDIS_URL: redisUrl, REDIS_PASSWORD: redisPassword } = process.env;

const client = redis.createClient(redisUrl, {
  no_ready_check: true,
  auth_pass: redisPassword
});

client.on('connect', () => {
  redisPassword && client.auth(redisPassword);
});

client.on('error', err => {
  global.console.log(err.message)
});
Run Code Online (Sandbox Code Playgroud)

但是我一直都收到以下错误:

投掷者 //未处理的“错误”事件

ReplyError:准备检查失败:NOAUTH需要身份验证。

为什么不处理?我设置了 onerror处理程序,
为什么“就绪检查”失败了?我在选项中禁用了

Gua*_*Zuo 7

我不确定为什么您的代码会引发此错误。但是我在本地计算机上尝试了此代码,效果很好。

const redis = require('redis');
const redisPassword = "password" ; 
const client = redis.createClient({
          host : '127.0.0.1',  
          no_ready_check: true,
          auth_pass: redisPassword,                                                                                                                                                           
});                               

client.on('connect', () => {   
          global.console.log("connected");
});                               

client.on('error', err => {       
          global.console.log(err.message)
});                               

client.set("foo", 'bar');         

client.get("foo", function (err, reply) {
        global.console.log(reply.toString())
})
Run Code Online (Sandbox Code Playgroud)

并运行节点client.js将输出:

连接的

酒吧

NOAUTH所需的身份验证是由redis process命令引起的,它发现客户端未通过身份验证,因此对其进行投诉。

我想您提供给createClient的redisUrl可能有问题,请尝试对其进行调试或更改为我的代码的尝试方式。希望您可以修复它。

还有一件事情:client.auth(redisPassword)是不必要的,因为如果您设置auth_pass或password选项,则redis客户端将在任何命令之前自动将auth命令发送到服务器。