Accessing a Session Object in Express Middleware
This is my Express middleware package:
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('./../'));
and here are two routes:
server.post('/setSession', function (req, res) {
req.session.user = 'admin';
}
server.post('/getSession', function (req, res) {
console.log(req.session.user);
}
Session management in route handlers now works. I can install session.user
and it will persist for subsequent requests in the same session as confirmed getSession
. However, the middleware function printSession
always prints undefined
.
How can I access the populated object session
in middleware?
source to share
This program works fine. Before I can access the /setSession
middleware prints after session: undefined
. As soon as I get / setSession it prints after session: admin
. As long as the browser you are testing (not curl) stores and sends session cookies, this will work as expected.
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);
source to share
There must be something wrong in your settings. The following example, which is very similar to your code but uses GET
instead POST
, works great for me
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')));
});
and
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');
});
Now when you do the following everything works as expected
- GET / getSession => undefined from middleware, undefined
- GET / setSession => undefined from middleware
- GET / getSession => admin from middleware, admin
source to share