我试图连接到密码受保护的redis服务器,但由于某些原因,我一直收到错误:
events.js:141抛出er;//未处理的“错误”事件^ ReplyError:就绪检查失败:需要NOAUTH身份验证。(/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
}));有人知道我为什么会犯这个错误吗?
发布于 2017-04-27 08:03:03
您应该在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
}));
})https://stackoverflow.com/questions/43646577
复制相似问题