Node.js 我正试图从heroku连接到在线redis服务器,但我的连接被拒绝

Node.js 我正试图从heroku连接到在线redis服务器,但我的连接被拒绝,node.js,heroku,redis,ioredis,Node.js,Heroku,Redis,Ioredis,我正在使用Node.js的Redis包(ioredis),我有一个托管在ScaleGrid上的Redis集群,我正试图从heroku连接到该集群,但我一直收到错误[ioredis]未处理的错误事件:错误:在TCPConnectWrap.afterConnect[as oncomplete](net.js:1106:14)Redis错误:{ReplyError:不需要身份验证。。这是我的代码 //This is what my redis uri provided by ScaleGrid uri

我正在使用Node.js的Redis包(
ioredis
),我有一个托管在ScaleGrid上的Redis集群,我正试图从heroku连接到该集群,但我一直收到错误
[ioredis]未处理的错误事件:错误:在TCPConnectWrap.afterConnect[as oncomplete](net.js:1106:14)Redis错误:{ReplyError:不需要身份验证。
。这是我的代码

//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 }),
}));
请问我如何解决此问题?以及为什么我仍然收到此
错误:connect econnrefuse127.0.0.1:6379


p.S.Redis在我的本地主机上运行得非常好

我意识到我所需要的只是在Redis客户端连接后立即发送密码进行身份验证
(client.auth(password)
)。 由于一些奇怪的错误,我不得不接受redis主机的
redislabs enterprise
,并且不得不从
ioredis
包更改为
redis
包。下面是代码

redis.js

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;
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 }),
}));
这是可选的,它仅显示如何在索引文件中使用连接的redis客户端

index.js

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;
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 }),
}));
这在本地主机和在线上都能很好地工作。希望这对其他人有所帮助