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处理程序,
为什么“就绪检查”失败了?我在选项中禁用了它
我不确定为什么您的代码会引发此错误。但是我在本地计算机上尝试了此代码,效果很好。
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命令发送到服务器。