【问题标题】:Not able to connect to heroku redis无法连接到heroku redis
【发布时间】:2022-01-26 09:38:07
【问题描述】:
const redis = require("redis");

let client = redis.createClient({
    host: process.env.host,
    port: process.env.port,
    password:process.env.password
});

(async () => {
    client.on('error', (err) => console.log('Redis Client Error', err));
    await client.connect();
    console.log("connected to redis")
  })();

我已经在我的项目中添加了 redis-heroku 插件,现在我正试图从我的代码中访问它,但它给了我这个错误:“AuthError: ERR Client sent AUTH, but no password is set”。

另外,当我尝试从终端连接时,我可以连接到它,但是当我输入任何 redis 命令时,我会收到“错误:对等方重置连接”。

如果我在本地系统和本地 redis 服务器上使用它,它工作正常

如果有人能给我提供heroku redis的工作代码会很有帮助,我认为redis有两个url:REDIS_URL,REDIS_TLS_URL。由于这个 tls(更安全)可能会出现问题

请帮帮我 谢谢

【问题讨论】:

  • 你使用的是哪个版本的node-redis?
  • 我正在使用 "redis": "^4.0.1" 和 redis-cli 5.0.7

标签: node.js heroku redis heroku-redis


【解决方案1】:

Heroku redis 不公开 hostportpassword 变量。相反,他们公开了一个REDIS_URL,将所有这些内容都包含在一个字符串中。

我相信你需要像这样调用 createClient...

createClient({
  url: process.env.REDIS_URL
});

【讨论】:

  • Redis 客户端错误错误:在 TCPConnectWrap.afterConnect 处连接 ECONNREFUSED [as oncomplete] (node:net:1142:16) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect',地址:'ip',端口:10080 }
  • 感谢您的回复。我的代码出现此错误@TerribleDev
  • @KanavRaina 我实际上认为这个答案看起来更好。 stackoverflow.com/a/65563689/3671357
  • const redis = require("redis");常量 redisUrl = process.env.REDIS_TLS_URL ? process.env.REDIS_TLS_URL : process.env.REDIS_URL; const redisDefaults = { tls: { // Heroku 使用自签名证书,这将导致连接错误,除非禁用检查 rejectUnauthorized: false, }, };常量客户端 = redis.createClient(redisUrl, redisDefaults); (async () => { client.on('error', (err) => console.log('Redis Client Error', err)); await client.connect(); console.log(connected to redis ${redisUrl}) } )();
  • 我也已经检查过该答案,当我尝试此代码时,这将连接到我的本地 redis 而不是 heroku redis,如果您能够连接到 heroku,请在您的本地系统上检查-redis,我无法连接到 heroku-redis
【解决方案2】:

在 node-redis v4 中,hostport 应该在 socket 对象内,而不是直接在主配置对象上(参见 https://github.com/redis/node-redis/blob/master/docs/client-configuration.md):

const client = redis.createClient({
    socket: {
        host: process.env.host,
        port: process.env.port
    },
    password: process.env.password
});

【讨论】:

  • const redis = require("redis"); const client = redis.createClient({ socket: { host: process.env.host, port: process.env.port }, 密码: process.env.password }); (async () => { client.on('error', (err) => console.log('Redis Client Error', err)); await client.connect(); console.log(connected to redis ) } )();
  • 我收到此错误连接 ECONNREFUSED 34.228.251.67:10080 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1142:16) { errno: -111, code: 'ECONNREFUSED', syscall :'连接',地址:'34.228.251.67',端口:10080 }
猜你喜欢
  • 2015-08-03
  • 2012-05-26
  • 1970-01-01
  • 2022-09-23
  • 2021-02-15
  • 2015-06-10
  • 2018-07-12
  • 1970-01-01
相关资源
最近更新 更多