‘sesión’ no está definida cuando se usa Express / Redis para la sesión de la tienda

Estoy tratando de usar redis para sesiones en mi aplicación express.

Yo hago lo siguiente:

var express = require('express'); var RedisStore = require('connect-redis')(express); app.configure('development', function(){ app.use(express.session({ secret: "password", store: new RedisStore({ host: "127.0.0.1", port: "6379", db: "mydb" }) })); 

Más adelante, en mi aplicación, si hago algo como:

 var whatever = req.session.someProperty; 

Yo obtengo:

No se puede leer la propiedad ‘someProperty’ de undefined

Esto indica que req.session no está definida (puedo ver esto desde una entrada de console.log en mi sección de configuración)

Definitivamente tengo Redis en ejecución, y puedo ver que mi aplicación se conecta inicialmente (usando el monitor redis-cli)

Parece que te estás perdiendo:

 app.use(express.cookieParser()); 

antes de su app.use(express.session(...)); llamada.

Mira aquí .

Las sesiones no funcionarán a menos que tenga estos 3 en este orden:

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

No estoy seguro de si el enrutador es obligatorio para usar las sesiones, pero las rompe si se coloca delante de ellas.

Tuvo el mismo problema, sin embargo, fue causado por cambios en la última versión de Express.

Ahora necesita pasar la sesión express a la función connect-redis exports para ampliar la sesión. Tienda:

 var express = require('express'); var session = require('express-session') var RedisStore = require('connect-redis')(session); 

Las cosas han cambiado recientemente con Express 3 / Express 4. Confirme que está utilizando la versión 4 .

El concepto completo de middleware cambió. Necesita instalar estos middlewares manualmente. “express-session” es uno de los middlewares 4.0.

Recomiendo leer

http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 y https://github.com/visionmedia/express/wiki/Migrating-from- 3.x-a-4.x

Además, algunos usuarios estaban confundidos de que el repository github en sí se llama solo “sesión”, pero

 npm install express-session 

es correcto.

Yo tuve el mismo problema. Resultó que redis simplemente se configuró en un puerto diferente.