我正在尝试连接到受密码保护的redis服务器但由于某种原因我不断收到错误:
events.js:141 扔掉//未处理的错误'事件 ^ ReplyError:就绪检查失败:NOAUTH需要验证。 at parseError(/home/ubuntu/TekIT/ITapp/node_modules/redis-parser/lib/parser.js:193:12) at parseType(/home/ubuntu/TekIT/ITapp/node_modules/redis-parser/lib/parser.js:303:14)
我知道密码是正确的,因为我在redis-cli中尝试过它并且工作正常。以下是代码:
var redis = require('redis');
var client = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });
var redisSubscriber = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });
// Create and use a Socket.IO Redis store
var RedisStore = require('socket.io-redis');
io.set('store', new RedisStore({
redisPub: client,
redisSub: redisSubscriber,
redisClient: client
}));
有谁知道我收到此错误的原因?
答案 0 :(得分:0)
您应该在socket.io-redis
事件后初始化ready
。
此外,您应该致电client.auth('password1', ()=>{})
函数。
检查这部分文档:
连接到需要身份验证的Redis服务器时,必须在连接后将AUTH命令作为第一个命令发送。与重新连接,准备检查等协调可能很棘手。为了使这更容易,client.auth()会保存密码并在每次连接后发送,包括重新连接。在对发送的第一个AUTH命令的响应之后,仅调用一次回调。注意:您对client.auth()的调用不应该在ready处理程序中。如果您这样做错误,客户端将发出类似于此错误的错误:就绪检查失败:不允许ERR操作。
试试这段代码:
var redis = require('redis');
const redisPort = 6379
const redisHostname = 'localhost'
const password = 'password1'
var p1 = new Promise((resolve, reject)=>{
var client = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });
client.auth(password)
client.on('ready', ()=>{
resolve(client)
})
})
var p2 = new Promise((resolve, reject)=>{
var redisSubscriber = redis.createClient(redisPort, redisHostname, { auth_pass: 'password1' });
redisSubscriber.auth(password)
redisSubscriber.on('ready', ()=>{
resolve(redisSubscriber)
})
})
Promise.all([p1,p2]).then(([client, redisSubscriber])=>{
console.log('done', client)
client.ping((err, data)=>{
console.log('err, data', err, data)
})
// Create and use a Socket.IO Redis store
var RedisStore = require('socket.io-redis');
io.set('store', new RedisStore({
redisPub: client,
redisSub: redisSubscriber,
redisClient: client
}));
})