首页 > 解决方案 > node.js中连接redis失败

问题描述

我正在尝试redis使用express(node.js). 这是我index.ts试图连接的文件redis

import mongoose from 'mongoose'
import express from 'express'
import session from 'express-session'
import connectRedis from 'connect-redis'
import Redis from 'ioredis'
import { MONGO_URI, MONGO_OPTIONS, REDIS_OPTIONS, APP_PORT } from './config'
import { createApp } from './app';

; (async () => {
    await mongoose.connect(MONGO_URI, MONGO_OPTIONS)

    const RedistStore = connectRedis(session)

    const client = new Redis(REDIS_OPTIONS)

    const store = new RedistStore({ client })

    const app = createApp(store)

    app.listen(APP_PORT, () => console.log('server running on port 3000'))
})()

这是我的REDIS_OPTIONS文件,其中有所有redis选项。

import { RedisOptions } from 'ioredis'

const {
    REDIS_PORT = 6379,
    REDIS_HOST = 'localhost',
    REDIS_PASSWORD = 'secret'
} = process.env

export const REDIS_OPTIONS: RedisOptions = {
    port: +REDIS_PORT,
    host: REDIS_HOST,
    password: REDIS_PASSWORD
}

docker-compose.yml

version: '3'

services: 
  db:
    user: $UID
    image: mongo
    ports:
    - '27017:27017'
    environment:
      MONGO_INITDB_ROOT: ''
      MONGO_INITDB_PASSWORD: ''
      MONGO_INITDB_DATABASE: auth,
      MONGO_USERNAME: ''
      MONGO_PASSWORD: ''
    volumes:
      - ./data:/data/db
      - ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro
  
  cache: 
    image: redis:alpine
    ports: 
      - '6379:6379'
    command: ['--requirepass "secret"']
      

package.json

{
    "name": "node-auth",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "up": "docker-compose up -d",
        "postup": "npm run dev",
        "stop": "docker-compose stop",
        "down": "docker-compose down",
        "dev": "npm run dev --prefix api"
    },
    "keywords": [],
    "author": "",
    "license": "ISC"
}

现在,当我尝试运行我的主应用程序文件时,我收到了这个错误

[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14) node.js

我怎样才能摆脱这个错误?

标签: javascriptnode.jsredis

解决方案


看起来这可能是 Redis 容器的问题。你用什么命令来运行容器?尝试-p 6379:6379使用 docker 命令添加。另外,检查端口 6379 是否被其他东西使用或被杀毒软件或防火墙阻止。


推荐阅读