RedisStore忽略主机和端口字段

时间:2017-02-01 16:47:50

标签: node.js express node-redis

我使用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,服务器应该连接到redis而不是默认127.0.0.1到端口6378而不是默认6379 < / p>

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

  

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

配置过程中是否有任何遗漏?

1 个答案:

答案 0 :(得分: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 });
}