在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和中间件文档。