req.session no está definido usando sesión rápida

Estoy empezando a aprender a usar cookies con node y express y me gustaría recibir ayuda para que esto funcione. Intenté seguir el tutorial de expressjs / session en GitHub, sin embargo, estoy obteniendo la req.session como undefined , por lo que no puedo establecer ni obtener ningún valor.

Mi objective es guardar el nombre y apellido de un usuario en una cookie para que un campo de entrada se rellene automáticamente. No estoy seguro si necesito usar también cookie-parser o si express-session puede manejar eso solo. No estoy seguro de cómo proceder ya que soy nuevo en las cookies y las sesiones rápidas.

Toda la ayuda es apreciada! Gracias por adelantado.

Código

 let express = require('express'); let app = express(); let credentials = require('../modules/credentials.js'); let session = require('express-session'); let sessionOptions = { secret: credentials.cookieSecret, cookie: { maxAge:269999999999 }, saveUninitialized: true, resave:true }; if (app.get('env') === 'production') { app.set('trust proxy', 1); sessionOptions.cookie.secure = true; } else { sessionOptions.cookie.secure = false; } app.use(session(sessionOptions)); let router = express.Router(); app.use(router); let request = require('request'); let db = require('../modules/queries'); let bodyParser = require('body-parser'); let cookieParser = require('cookie-parser'); // app.use(cookieParser()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); router.get('/me', function(req, res, next) { console.log('req.session: '+req.session); let firstName = req.session.firstName; let lastName = req.session.lastName; if (firstName && lastName) { res.render('student/me.jade', {firstName, lastName}); } else { res.render('student/me.jade', { firstName: '', lastName: ''}); } }); router.post('/api/me', function(req, res, next) { let firstName = req.body.firstName; let lastName = req.body.lastName; // session.firstName = firstName; // session.lastName = lastName; req.session.firstName = firstName; req.session.lastName = lastName; console.log('session.firstName: '+session.firstName); db.addEvent(req, res, next); }); module.exports = router; 

Una vez que monte un enrutador en una aplicación Express, no se llamará a ningún middleware posteriormente declarado en esa aplicación para ninguna solicitud dirigida al enrutador.

Así que si tienes esto:

 app.use(router) app.use(session(...)); 

El middleware de la sesión no será llamado para ninguna solicitud que sea manejada por el router (incluso si declara las rutas que el enrutador debería manejar en algún momento posterior). Para eso, necesitas cambiar el orden:

 app.use(session(...)); app.use(router); 

Un problema adicional es que estás exportando un router , que probablemente debería ser una app (que es la instancia que “contiene” todo el middleware, enrutadores, etc.):

 module.exports = app; 

Para obtener datos de sesión

Primero, tienes que inicializar sesión rápida con

 app.use(session({ resave: true ,secret: '123456' , saveUninitialized: true})); 

entonces cuando quieras poner algo en la sesión

 req.session.firstName = 'Aniruddha'; req.session.lastName = 'Chakraborty'; 

Entonces puedes comprobarlo sin errores.

 console.log('req.session: '+req.session.firstName); 

Nota: ¡Este es un trabajo de sesiones expresas!