首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我试图从heroku连接到一个在线的redis服务器,但是我的连接被拒绝了。

我试图从heroku连接到一个在线的redis服务器,但是我的连接被拒绝了。
EN

Stack Overflow用户
提问于 2019-09-29 18:48:32
回答 1查看 1.5K关注 0票数 2

我正在为Node.js (ioredis)使用Redis包,我在ScaleGrid上托管了一个redis集群,我试图从heroku连接到这个集群,但是我一直在获取错误[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14) Redis Error: { ReplyError: NOAUTH Authentication required.。这是我的密码

代码语言:javascript
复制
//This is what my redis uri provided by ScaleGrid uri looks like, this is not exact string though
REDIS_URI=SG-Stack-12345.servers.mongodirector.com:6379

import session from 'express-session';
import Redis from 'ioredis';
import connectRedis from 'connect-redis';

const redisClient = process.env.REDIS_URI;

const redis = new Redis(redisClient);
const redisStore = connectRedis(session);

redis.on('error', (err) => {
  console.log('Redis Error:', err);
});

app.use(session({
  secret: process.env.SESSION_SECRET,
  name: '_redisSession',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false },
  store: new redisStore({ client: redis, ttl: 86400 }),
}));

请问我如何解决这个问题?为什么我还能得到这个Error: connect ECONNREFUSED 127.0.0.1:6379

P.S. Redis在我的本地主机上工作得很好

EN

回答 1

Stack Overflow用户

发布于 2019-09-30 13:04:31

我意识到,我所需要的只是在redis客户端连接(client.auth(password)之后立即发送用于身份验证的密码。由于一些奇怪的错误,我不得不接受redislabs enterprise的redis托管,也不得不从ioredis包更改为redis包。这是以下代码

redis.js

代码语言:javascript
复制
import { createClient } from 'redis';

const {
  PASSWORD: password,
  REDIS_HOST: host, // On localhost, set to 'localhost' or '127.0.0.1'
  REDIS_PORT: port, // On localhost,  set to 6379
} = process.env;

// connect to Redis host with port and host set as environment variables
const client = createClient(port, host, { no_ready_check: true });

// If password is in environment variable, send password to the host for authentication
if (password) {
  client.auth(password, (err) => {
    if (err) throw err;
  });
}

client.on('connect', () => console.log('connected to Redis'));

client.on('error', (err) => {
  console.log('Redis Error:', err);
});

export default client;

这是可选的,它只显示索引文件中如何使用连接的redis客户端。

index.js

代码语言:javascript
复制
import session from 'express-session';
import connectRedis from 'connect-redis';
import client from './redis'

const redisStore = connectRedis(session);

app.use(session({
  secret: 'IwontTell',
  name: '_stackOverflow',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false },
  store: new redisStore({ client, ttl: 86400 }),
}));

这在本地主机和在线上都能很好地工作。希望这能帮到别人

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

https://stackoverflow.com/questions/58158207

复制
相关文章

相似问题

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