在connect-redis中重复前缀

时间:2015-12-24 07:07:39

标签: node.js redis connect

我正在尝试使用connect-redis:“~3.0.1”与express-session:“~1.12.1”在我的网络应用程序中存储用户会话。但是当我在RedisStore中给出前缀字段时,它会重复两次。请告诉我是否做错了。

“MySession的:MySession的:yzO1mRhloENUMYLkAz2nZprcfvcFMNHY”    “MySession的:MySession的:0L8prCJAoq0CmJ9tTwTJ_smQ4fH2R_H9”

在搜索时,我遇到了与laravel代码相似的问题:

https://github.com/laravel/framework/issues/5353

请告诉我这里是否发生了类似的事情,如果是,那么解决方法是什么。

以下是我正在使用的代码:

var sessionMiddleware = session({
 secret : 'secretPass',
 store: new RedisStore({
   prefix:'mySession:',
   ttl: 1800}),
 resave: false,
 saveUninitialized: false
});

app.use(function (req, res, next) {
  var tries = 3;

  function lookupSession(error) {
    if (error) {
      return next(error);
    }

   tries -= 1

   if (req.session !== undefined) {
     return next();
   }

   if (tries < 0) {
     var errorMsg = 'Error in getting session. Please refresh the page.';
     return next(new Error(errorMsg));      
   }

   sessionMiddleware(req, res, lookupSession);
 }

 lookupSession();
})

1 个答案:

答案 0 :(得分:1)

我能够通过先手创建redis客户端并将其传递给会话对象来解决问题,如下所述,而不依赖于connect-redis为我创建它。

redis_client = require('redis').createClient();

var sessionMiddleware = session({
  secret : 'secretPass',
  store: new RedisStore({
    prefix:'mySession:',
    ttl: 1800,
    client: redis_client}),
  resave: false,
  saveUninitialized: false

});

如果我没有通过客户端,则connect-redis.js中的以下代码在创建redis客户端时传递选项,然后添加一个额外的前缀。

// convert to redis connect params
if (options.client) {
  this.client = options.client;
}
else if (options.socket) {
  this.client = redis.createClient(options.socket, options);
}
else {
   this.client = redis.createClient(options);
}