Session ';会议';将express/redis用于会话存储时未定义
我正在尝试在我的express应用程序中使用redis进行会话 我做了以下工作:Session ';会议';将express/redis用于会话存储时未定义,session,node.js,redis,express,Session,Node.js,Redis,Express,我正在尝试在我的express应用程序中使用redis进行会话 我做了以下工作: var express = require('express'); var RedisStore = require('connect-redis')(express); app.configure('development', function(){ app.use(express.session({ secret: "password",
var express = require('express');
var RedisStore = require('connect-redis')(express);
app.configure('development', function(){
app.use(express.session({ secret: "password",
store: new RedisStore({
host: "127.0.0.1",
port: "6379",
db: "mydb"
})
}));
稍后,在我的应用程序中,如果我执行以下操作:
var whatever = req.session.someProperty;
我得到:
无法读取未定义的属性“someProperty”
这表示req.session未定义
(我可以从我的配置部分的console.log条目中看到这一点)
我肯定已经让redis运行,并且可以看到我的应用程序最初连接到它(使用redis cli监视器)看起来您缺少:
app.use(express.cookieParser());
在你的应用程序之前使用(express.session(…)代码>呼叫
请参阅。除非按照以下顺序设置以下3个会话,否则会话将不起作用:
app.use(express.cookieParser());
app.use(express.session());
app.use(app.router);
我不确定路由器是否必须使用会话,但如果它放在会话之前,它会破坏会话。我也有同样的问题。事实证明,redis只是配置为不同的端口。也有同样的问题,但这是由最新版本的express中的更改引起的
您现在需要将express session传递给函数connect redis exports以扩展会话。存储:
var express = require('express');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);
Express 3/Express 4最近发生了变化。
请确认您正在使用版本4
完整的中间件概念改变了。您需要手动安装这些中间件。“快速会话”是4.0中间件之一
我建议你读书
及
此外,一些用户感到困惑的是,它本身只是被命名为“会话”,但
正确。我有app.use(app.router);在express.session之前,这似乎打破了它。这个答案很难找到,应该在文档中的某个地方。向上投票!这个答案更完整。你需要做两件事:1)启用cookieParser()和2)移动“app.use(app.router);”倒下。我认为这应该是正确的答案。即使所有3件事情都按正确的顺序进行,req.session仍然未定义,不知道为什么。自版本1.5.0以来,此答案将如何更新?目前,express session是一个单独的模块。根据文档,“cookie解析器中间件不再需要用于此模块的工作”这个问题是在2012年4月17日提出的,因此与版本4无关。对于版本4:我也有同样的问题,但我确实有app.user(cookieParser())这样的工具来帮助我走上正确的道路。我被Heroku更改了我在本地主机上使用的REDIS_URL的事实绊倒了。我可能知道这一点,因为他们自己也提到过:>“REDIS配置变量可能随时发生变化。在Heroku应用程序之外依赖配置变量可能会导致您不得不重新复制该值(如果该值发生变化)。”
npm install express-session