gpt4 book ai didi

node.js - 我正在尝试从 heroku 连接到在线 Redis 服务器,但我的连接被拒绝

转载 作者:行者123 更新时间:2023-12-02 19:29:45 25 4
gpt4 key购买 nike

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

//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 ECONNREFUSED 127.0.0.1:6379

P.S. Redis 在我的本地主机上完美运行

最佳答案

我意识到我所需要的只是在redis客户端连接后立即发送密码进行身份验证(client.auth(password)。我不得不选择使用 redislabs enterprise 来托管我的 redis,并且由于一些奇怪的错误,我还必须从 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;

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

index.js

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 }),
}));

这在本地主机和在线上都可以完美运行。希望这对某人有帮助

关于node.js - 我正在尝试从 heroku 连接到在线 Redis 服务器,但我的连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58158207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com