Redis云在节点heroku应用程序中的会话

我有一个快速的应用程序,它使用Redis云来存储Heroku中的会话。 几个月前它工作的很好,但我刚刚重新访问它,它不再工作。 看来没有会话,并引发错误TypeError: Cannot read property 'user' of undefined ,违规的代码行是

 if (!req.session.user) { ... ... } 

也许我正在configuration的东西不正确

 var session = require('express-session'); var RedisStore = require('connect-redis')(session); var redis = require('redis-url').connect(config.redis_url); var sessionMiddleware = session({ store: new RedisStore({ host: config.redis_host, port: config.redis_port }), secret: 'Its a secret.', cookie: { secure: true }, saveUninitialized: true, resave: true }); 

相应的configuration文件是

 module.exports = { mongo_url: process.env.MONGOLAB_URI || 'mongodb://127.0.0.1:27017/psa', redis_url: process.env.REDISCLOUD_URL || 'redis://localhost:6379', redis_host: taken from process.env.REDISCLOUD_URL, redis_port: taken from process.env.REDISCLOUD_URL, port: process.env.PORT || 5000 }; 

当我按照以下方式定义会话中间件时,这适用于本地forman start web

 var sessionMiddleware = session({ secret: 'VkWdLXauq6ya', saveUninitialized: true, resave: true, store: new RedisStore({ client: redis }), cookie: { path: '/', maxAge: 3600000 }, name: 'sessionCookie' }); 

您是否使用cookieParser中间件? 你需要:

app.use(express.cookieParser());

看起来像它是类似于这个其他stackoverflow问题 。

你如何使用创build的会话中间件? 例如:

 var sessionMiddleware = session({ 

这就创build了一个可以在你的快速堆栈中使用的函数。 但是,除非您真正使用它,否则它什么也不做,如:

 var app = express(); app.use(sessionMiddleware);