在Express.js中使用会话MemoryStore不定义req.session

我用Express.jsbuild立了一个Node.jstesting服务器,如下所示:

var express = require('express'); var MemoryStore = express.session.MemoryStore; var app = express.createServer(); app.configure(function() { app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(app.router); app.use(express.session({ store: new MemoryStore(), secret: 'secret', key: 'bla' })); }); app.get('/', function(req, res){ console.log(req.session); res.end("html"); }); app.listen(3000); 

为什么console.log(req.session)打印出未定义? 我没有正确使用它吗? 为了将variables保存到用户的会话中,我需要做些什么?

客户收到一个存储为他的cookie的SID,但是我不能给req.session分配任何属性,因为它没有被定义。 感谢任何提示,以解决这个问题! 🙂

这是我使用的版本:

 ├─┬ express@2.5.9 │ ├─┬ connect@1.8.7 │ │ └── formidable@1.0.9 │ ├── mime@1.2.4 │ ├── mkdirp@0.3.0 │ └── qs@0.4.2 

我不知道app.router是什么,但似乎是问题的原因。 删除该行使它为我工作。

这是你的问题: app.use(app.router)将你的路线安装在调用链中的那个位置。 你会话中间件之前已经有了,所以没有任何req.session 。 当你离开它,你的路线将被定位,每当你做你的第一个app.get (或app.post等)。 如果您仍然希望控制路线的位置,可以app.use(app.router)中间件下面的app.use(app.router)移动。

请参阅Express' configuration和中间件文档。