为什么节点表达req.session会随着redis消失?

时间:2013-11-01 19:09:56

标签: node.js session express redis

使用此代码,Node.js表达会话非常适合我:

var express = require("express");
var app = express();
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
    cookie: {maxAge: pembapp.dayInMilliseconds * 180},
    secret: 'mysecret',
    key: 'mykey'
}));

我可以访问req.session.whatever没有任何问题。

现在我想使用redis来存储会话数据,以防需要重启服务器,所以代码就变成了这样:

var express = require("express");
var app = express();
var RedisStore = require('connect-redis')(express);
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
    cookie: {maxAge: pembapp.dayInMilliseconds * 180},
    secret: 'mysecret',
    key: 'mykey',
    store: new RedisStore({
        host: 'localhost',
        port: 6379,
        db: 2,
        prefix: 'myprefix',
        pass: 'mypasswd'
    })
}));

当我添加redis代码时,req.session现在未定义!无法想象我的生活。当我为会话添加redis商店时,为什么req.sesion会“消失”?

2 个答案:

答案 0 :(得分:1)

我想我们可以关闭这个。当req.session未定义时,也许我没有连接到redis。我确实发现在使用redis时我需要显式调用req.session.save(),没有redis就不需要。

从我在那里看到的问题判断,如果有人可以创建一个清晰的node.js示例,使用redis-connect进行持久会话,对于节点新手,从头开始,我想你会成为一群人非常高兴。

答案 1 :(得分:0)

您确定它是否连接到Redis数据库?