首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis Cloud和connect redis:客户端已关闭

Redis Cloud和connect redis:客户端已关闭
EN

Stack Overflow用户
提问于 2021-12-18 09:45:38
回答 6查看 3.7K关注 0票数 3

目前,我使用Express构建了一个网站,并希望使用redis云数据库在会话中保存userID。redisClient是在redisClient.js中创建的,之后我在app.js会话中将它传递给redisStore。以下是代码:

redisCLient.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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
}));

的问题是:在启动服务器时,我在控制台中记录了错误消息,如下所示:

代码语言:javascript
复制
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错误,如上面控制台日志中所示。我怎么才能解决这个问题?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2021-12-27 17:27:29

在同样的问题上被困在一起找到了一些运气。使用了“ioredis”模块,而不是无缝工作的redis。

代码语言:javascript
复制
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;
票数 6
EN

Stack Overflow用户

发布于 2022-03-04 01:45:44

使用redis.createClient创建客户端时,需要使用url而不是hostport

请参阅基本实例

它显示了url格式的redis[s]://[[username][:password]@][host][:port][/db-number]

在你的例子中,可能是这样的

代码语言:javascript
复制
var url = `redis://<YourUsername>:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOSTNAME}:${parseInt(process.env.REDIS_PORT)}`
redis.createClient({
    url: url
});

使用hostport选项必须是旧版本。

票数 1
EN

Stack Overflow用户

发布于 2021-12-20 11:46:11

auth选项1:切换对 connect的调用顺序

来自节点Redis客户端文档

当连接到需要身份验证的Redis服务器时,必须将AUTH命令作为连接后的第一个命令发送。

因此,您应该切换对redisClient.authredisClient.connect的调用顺序。

auth选项2:删除对的调用

然而,选项声明:

如果设置,客户端将在connect上运行Redis auth命令。

当您向password提供createClient时,您也可以直接删除对auth的显式调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70402383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档