Express js和connect-redis

时间:2018-02-06 07:56:21

标签: node.js express redis

我目前正在Express Js中编写一个网站。我需要为我的用户创建一个登录页面,然后在持久会话中存储一些信息。

为此,我决定使用express-session和session store connect-redis。

现在,我可以创建一个会话,但是当我刷新或移动到另一个页面时,会话就会消失。

我的Redis服务器(在开发时我的窗口上)位于地址:localhost:6379并且运行正常。

app.js:



var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var redis = require("redis").createClient();
var login = require('./routes/login');
.....
 
// express session
app.use(session({
    store: new RedisStore({ host: 'localhost', port: 6379, client: redis, ttl: 260 }),
    secret: 'sqdsqdfqszvrqsdrvqsrfvqsefqcrqs',
    resave: false,
    saveUninitialized: true
}));

app.use('/login', login);




login.js(创建会话的帖子):



router.post('/', [..(validators)..], (req, res, next) => {
    const errors = validationResult(req);
    req.session.user = user;
    res.redirect('/login');
});




login.js(如果会话存在,则获取测试):



router.get('/', function(req, res, next) {
    console.log(req.session.user);
    res.render('login', { title: 'login' });
});




我想我错过了什么,你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

好的,我发现了我的错误,请不要像我在get方法中那样使用res.redirect('/login');而是使用res.render('/login', { title: 'login'});。当您重定向时,会话不会被存储,但是当您渲染它时它会起作用。

全部;)