我已经使用Express.js设置了一个Node.js测试服务器,如下所示:
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)
打印出undefined?我没有正确使用它吗?为了将变量保存到用户的会话,我需要做什么?
客户端收到一个存储为其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
答案 0 :(得分:20)
这是您的问题:app.use(app.router)
将您的路线安装在调用链中的该位置。您在会话中间件之前已经,因此还没有req.session
。当您将其遗漏时,只要您执行第一次app.get
(或app.post
等等),您的路线就会定位。如果您仍希望控制路径的位置,可以将app.use(app.router)
移到会话中间件下方。
请参阅快速“Configuration和Middleware文档。
答案 1 :(得分:2)
我不知道app.router
是什么,但似乎是问题的原因。删除该行使它对我有用。