【问题标题】:Connect-redis store don't work with socket.ioConnect-redis 商店不适用于 socket.io
【发布时间】:2013-06-15 17:19:11
【问题描述】:

对于使用 connect-redis 的人,我有一个简单的问题。

我想将它与带有函数io.set('store', something) 的socket.io 一起使用。 我不知道为什么,当我做

var RedisSessionStore = require('connect-redis')(express);
var sessionStore = new RedisSessionStore();

app.use(express.session({
  secret: 'some totally secret key',
  cookie: {
    maxAge: 1000 * 60 * 60
  },
  store: sessionStore
}));

//and then I wan't to use the session store for socket.io
io.set('store', sessionStore);

它说Object #<RedisStore> has no method 'subscribe'

【问题讨论】:

    标签: javascript node.js redis socket.io


    【解决方案1】:

    connect-redis 是 Redis 支持的 Connect/Express 会话存储,但它与 socket.io 使用的“存储协议”不兼容。

    相反,您需要使用 socket.io 附带的 Redis 存储实现:

    var SocketIoRedisStore = require('socket.io/lib/stores/redis'),
        redis              = require('socket.io/node_modules/redis');
    ...
    io.set('store', new SocketIoRedisStore({
      redisPub    : redis.createClient(),
      redisSub    : redis.createClient(),
      redisClient : redis.createClient()
    }));
    

    (docs)

    【讨论】:

    • 谢谢!我很害怕,因为我认为我必须创建第二组 pub/sub/client,一组用于 socket.io,一组用于 express。现在我看到new RedisSessionStore 接受redis 客户端作为选项。
    • 这是否意味着上面这一行 var RedisSessionStore = require('connect-redis')(express);应该从 app.js 文件中删除还是只重命名变量以创建 io.set 部分?如果要删除 var,您将上面的快速会话存储为什么?
    猜你喜欢
    • 2019-10-21
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多