【问题标题】:RedisStore ignores host and port fieldsRedisStore 忽略主机和端口字段
【发布时间】:2017-02-01 16:47:50
【问题描述】:

我正在使用 expressconnect-redis 让服务器使用 Redis 进行会话。

import Session from 'express-session';
const session = Session({
  resave: true,
  saveUninitialized: true,
  key: '...', 
  secret: '...',
  store: initializeRedis(Session);
});

redis 初始化程序如下所示:

import { createClient as createRedisClient } from 'redis';
import connectRedis from 'connect-redis';

export default function initializeRedis(Session) {
  const redisClient = createRedisClient();
  const RedisStore = connectRedis(Session);
  return new RedisStore({
    host: 'redis',
    port: 6378,
  });
}

根据之前的option parameters,服务器应该通过6378端口而不是默认的6379连接到redis而不是默认的127.0.0.1

但是,无论这些值等于多少,我总是得到相同的输出:

错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379

在配置过程中有什么我遗漏的吗?

【问题讨论】:

    标签: node.js express node-redis


    【解决方案1】:

    TL;DR

    Redis 客户端缺少 hostport 参数。 RedisStore里面没有客户端。

    const redisClient = createRedisClient({
      host: 'redis',
      port: 6379
    });
    
    return new RedisStore({
      client: redisClient,
    });
    

    文章末尾有完整的可复制粘贴代码,以防对其他人有用。

    完整版

    有几种方法可以解决上面的代码。

    1. const redisClient = createRedisClient() 没有分配到任何地方,但它仍在进行连接工作。因此,服务器因为无法连接而崩溃,但这不是RedisStore 故障。

    在我发布问题时,我没有注意到那条线路在那里,我认为它是由于商店而崩溃的。

    事实上,没有那行它也可以工作,因为RedisStore has a default client implementation

    或 使用主机、端口或套接字参数为您创建。

      return new RedisStore({
        host: 'redis',
        port: 6379,
      });
    

    2。 redis 客户端缺少主机和端口自定义值(默认值为'127.0.0.1'6379

      import { createClient as createRedisClient } from 'redis';
      const redisClient = createRedisClient({
        host: 'redis',
        port: 6379
      });
    

    如果我们使用特定的客户端实现,我们将其传递给RedisStore 也是有意义的:

      const RedisStore = connectRedis(Session);
      return new RedisStore({
        client: redisClient,
      });
    

    完整的外卖代码

    server.js

    import Session from 'express-session';
    import initializeRedis from './redis';
    
    // Initialize session.
    const session = Session({
      resave: true,
      saveUninitialized: true,
      key: 'SID',
      secret: 'Luke Skywalker',
      store: initializeRedis(Session)
    });
    app.use(session);
    

    redis.js

    import { createClient as createRedisClient } from 'redis';
    import connectRedis from 'connect-redis';
    
    export default function initializeRedis(Session) {
      const redisClient = createRedisClient({
        host: 'redis', // or '127.0.0.1'.
        port: 6379,
      });
      const RedisStore = connectRedis(Session);
      return new RedisStore({ client: redisClient });
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-20
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      相关资源
      最近更新 更多