目前,我使用Express构建了一个网站,并希望使用redis云数据库在会话中保存userID。redisClient是在redisClient.js中创建的,之后我在app.js会话中将它传递给redisStore。以下是代码:
redisCLient.js
const redis = require("redis");
let redisClient = redis.createClient({
host: process.env.REDIS_HOSTNAME,
port: parseInt(process.env.REDIS_PORT),
password: process.env.REDIS_PASSWORD
});
redisClient.on('error', function(err) {
console.log('*Redis Client Error: ' + err.message);
});
redisClient.on('connect', function(){
console.log('Connected to redis instance');
});
(async () => {
await redisClient.auth(process.env.REDIS_PASSWORD)
.catch(err => {console.log('Redis auth error: ' + err.message)});
await redisClient.connect()
.catch(err => {console.log('Redis connect error: ' + err.message)});
})();
module.exports = redisClient;app.js
const session = require("express-session");
const redisStore = require('connect-redis')(session);
const redisClient = require('./session-store/redisClient');
...
app.use(cookieParser());
app.use(session({
store: new redisStore({client: redisClient, ttl: 3600 * 24 * 30}),
saveUninitialized: false,
secret: process.env.SESSION_SECRET,
resave: false
}));的问题是:在启动服务器时,我在控制台中记录了错误消息,如下所示:
Redis auth error: The client is closed
*Redis Client Error: connect ECONNREFUSED 127.0.0.1:6379
*Redis Client Error: connect ECONNREFUSED 127.0.0.1:6379
*Redis Client Error: connect ECONNREFUSED 127.0.0.1:6379
*Redis Client Error: connect ECONNREFUSED 127.0.0.1:6379
...我使用这个指南来设置redis云并分配dotenv变量(主机、端口和密码)。我已经调试,dotenv运行良好,主机、端口和密码变量正确。
但问题仍然存在。我仍然得到客户端关闭并连接ECONNREFUSED 127.0.0.1:6379错误,如上面控制台日志中所示。我怎么才能解决这个问题?
发布于 2021-12-27 17:27:29
在同样的问题上被困在一起找到了一些运气。使用了“ioredis”模块,而不是无缝工作的redis。
const redis = require('ioredis');
const redisClient = redis.createClient({host:'your host address',port:your port,username:'',password:''});
redisClient.on('connect',() => {
console.log('connected to redis successfully!');
})
redisClient.on('error',(error) => {
console.log('Redis connection error :', error);
})
module.exports = redisClient;发布于 2022-03-04 01:45:44
使用redis.createClient创建客户端时,需要使用url而不是host、port。
请参阅基本实例
它显示了url格式的redis[s]://[[username][:password]@][host][:port][/db-number]
在你的例子中,可能是这样的
var url = `redis://<YourUsername>:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOSTNAME}:${parseInt(process.env.REDIS_PORT)}`
redis.createClient({
url: url
});使用host,port选项必须是旧版本。
发布于 2021-12-20 11:46:11
auth选项1:切换对和 connect的调用顺序
当连接到需要身份验证的Redis服务器时,必须将AUTH命令作为连接后的第一个命令发送。
因此,您应该切换对redisClient.auth和redisClient.connect的调用顺序。
auth选项2:删除对的调用
然而,选项声明:
如果设置,客户端将在connect上运行Redis auth命令。
当您向password提供createClient时,您也可以直接删除对auth的显式调用。
https://stackoverflow.com/questions/70402383
复制相似问题