有人能解决这个问题吗?我是 Node.js 和 Redis 初学者。
该函数createClient()可以接受 2 个参数:端口和主机。但我仍然被这个问题困扰。
var client = redis.createClient();
client.on('connect', function(){
console.log('Redis client connected');
});
Run Code Online (Sandbox Code Playgroud)
错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379 C:\Users\my-pc\Desktop\FINAL> 节点索引 events.js:187 throw er; // 未处理的“错误”事件 ^
错误:与 127.0.0.1:6379 的 Redis 连接失败 -
在 TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14) 处连接 ECONNREFUSED 127.0.0.1:6379 在 RedisClient 实例上发出“错误”事件:at RedisClient.on_error (C:\Users\my-pc\Desktop\FINAL\node_modules\redis\index.js:406:14) 在套接字上。(C:\Users\my-pc\Desktop\FINAL\node_modules\redis\index.js:279:14) 在 Socket.emit (events.js:210:5) 在 emitErrorNT (internal/streams/destroy.js: 92:8)在emitErrorAndCloseNT(内部/流/destroy.js:60:3)在processTicksAndRejections(内部/process/task_queues.js:80:21){errno:'ECONNREFUSED',代码:'ECONNREFUSED'
,系统调用:'连接',地址:'127.0.0.1',
端口:6379 }
小智 6
每当我也开始使用 docker 多个本地容器时,这是一个非常常见但简单的问题。
看,您已经创建了一个节点应用程序和一个 Redis 服务器,但两者是分开的,您没有在它们之间建立任何通信,这就是您面临此类问题的原因。
现在,首先您必须在节点应用程序和 redis 服务器之间建立连接,以便它们之间可以进行通信。
为此,只需按照说明进行操作即可,希望这能解决您的问题。
步骤 1:要在多个本地容器之间建立连接,您有两种选择:
* Use docker CLI's networking features.
* Or, simply use docker-compose to solve the issue, i prefer docker-compose and i will show how to do this using docker-compose.
Run Code Online (Sandbox Code Playgroud)
Docker-compose:Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。docker-compose 概述
步骤2:在项目目录中创建一个 docker-compose .yml 文件,命名为“docker-compose.yml”
步骤 3:在“docker-compose.yml”文件中写入以下代码:
version: "2.0"
services:
redis-server:
image: "redis"
node-app:
build: .
ports:
- "8080:8080"
Run Code Online (Sandbox Code Playgroud)
步骤 4:在 redis.createClient() 函数中,只需在 index.js 文件中传递主机和端口参数
const client = redis.createClient({
host: "redis-server",
port: 6379
});
Run Code Online (Sandbox Code Playgroud)
第 5 步:使用 docker-compose CLI 中的 docker-compose 构建并运行 docker 容器
docker-compose up --build
Run Code Online (Sandbox Code Playgroud)
步骤 6:最后,打开浏览器并点击以下 URL:
localhost:8080
Run Code Online (Sandbox Code Playgroud)
仅供参考(我今晚浪费了这个)
这不起作用(它默认连接到 localhost:6379 无论您在 url 中输入什么):
const redisURL = "redis://foo.bar.org:6379"
redis.createClient( redisURL )
Run Code Online (Sandbox Code Playgroud)
但这确实有效
redis.createClient( {url: redisURL} )
Run Code Online (Sandbox Code Playgroud)
希望我节省了您的时间。
| 归档时间: |
|
| 查看次数: |
20196 次 |
| 最近记录: |