这是我的Express中间件堆栈:
var server = express()
.use(express.cookieParser())
.use(express.session({secret: 'Secret'}))
.use(express.bodyParser())
.use(function printSession(req, res, next) {
console.log(req.session.user);
next();
})
.use(express.static('./../'));
以下是两条路线:
server.post('/setSession', function (req, res) {
req.session.user = 'admin';
}
server.post('/getSession', function (req, res) {
console.log(req.session.user);
}
现在路由处理程序中的会话管理工作找到了。我可以设置session.user
,并且会在getSession
确认的同一会话中保留后续请求。但是,中间件函数printSession
始终打印undefined
。
如何访问中间件中填充的session
对象?
答案 0 :(得分:3)
这个程序运行正常。在我访问/setSession
之前,中间件会打印after session: undefined
。一旦我获得GET / setSession,它就会打印after session: admin
。只要您正在测试的浏览器(而不是curl)存储并发送会话cookie,这将按预期工作。
var express = require('express');
var server = express();
server.use(express.cookieParser());
server.use(express.session({secret: 'SEKRET'}));
server.use(function (q,r,n) {console.log('after session:', q.session.user);n();});
server.get('/', function (q,r,n) {r.send("you got slashed");});
server.get('/setSession', function (req, res) {
console.log("logging admin in via /setSession");
req.session.user = 'admin';
res.send("admin logged in");
});
server.listen(3000);
答案 1 :(得分:0)
您的设置一定有问题。以下示例与您的代码非常相似,但使用GET
代替POST
,对我来说很好用
app.configure(function(){
// ...
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(function(req, res, next) {
console.log(req.session.user + ' from middleware');
next();
});
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
和
app.get('/getSession', function(req, res) {
console.log(req.session.user);
res.send('awesome');
});
app.get('/setSession', function(req, res) {
req.session.user = 'admin';
res.send('done');
});
现在,当您执行以下操作时,一切都按预期工作