如何正确设置会话存储的redis

时间:2015-02-24 14:06:32

标签: javascript node.js express redis

我正在尝试像这样设置Redis商店:

var express = require('express');
var app = express();
.......
.......
var session = require('express-session');
var redis = require("redis").createClient();
var RedisStore = require("connect-redis")(session);

app.use(session({
  store: new RedisStore({
     host: 'localhost',
     port: 6379,
     client: redis
   }),
  secret: 'keyboard cat'
}));

但是像这样使用passport.js不会工作,express-flash会抛出错误:`错误:req.flash()需要会话。

我相信Redis根本不工作。

我也很混淆配置,我应该将localhost放在主机密钥中吗?我使用的是Cloud 9,而不是我的localhost。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不确定我可以用passport.js和express-flash帮助你,但这就是我用express,redis和socket.io建立会话的方式:

var express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var RedisStore = require('connect-redis')(session);
............
var cookieSecret = "secret phrase";
var sessionMiddleware = session({
    store: new RedisStore({
        host: '127.0.0.1',
        port: 6379,
        prefix: 'sess'
    }),
    secret: cookieSecret,
    cookie: {httpOnly: true, secure: true}, //I'm using https, so you should remove secure: true
    resave: true,
    saveUninitialized: true
});
.....
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser(cookieSecret));
app.use(sessionMiddleware);
....
var io = require('socket.io')(https);
io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

io.on('connection', function(socket){
    console.log("connected");
    console.log(socket.request.session);
});

希望这有点帮助

答案 1 :(得分:0)

有类似的问题。是的,您可能没有为您创建的客户端运行Redis服务器。尝试在你的机器上安装并运行redis-server,这对我来说很有用。