2012-03-29 33 views
8

Estoy tratando de usar el objeto de conexión cookieSession incorporado, pero no puedo hacer que funcione correctamente con Express.Cómo usar cookieSession en expreso

que tienen esta aplicación:

var express = require('express'); 
var connect = require('connect'); 

var app = express.createServer(); 

app.configure(function() { 
    app.use(express.logger()); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser('whatever')); 
    app.use(connect.cookieSession({ cookie: { maxAge: 60 * 60 * 1000 }})); 
}); 

app.get('/', function(req, res) { 
    res.render('root'); 
}); 

app.listen(3000); 

estoy recibiendo este error:

TypeError: Cannot read property 'connect.sess' of undefined 
    at Object.cookieSession [as handle] 

¿Alguna idea?

gracias

+0

algún motivo especial que usted esté usando en lugar de connect.cookieSession express.cookieSession? –

+1

@AndersBornholm la pregunta es bastante antigua, probablemente no estaba disponible en ese momento – mihai

Respuesta

1

Cuál es la versión de su módulo connect? El middleware cookieSession se agregó por primera vez en la versión 2.0.0. Ejecute npm list|grep connect para asegurarse de que su versión connect sea al menos 2.0.0 o superior.

+0

Express viene con connect 1.8.6, así que sí, probablemente sea por eso que no funciona. Gracias – mihai

+2

Express 3 viene con connect 2.7. – UpTheCreek

1

Tuve este problema también. Resultó que everyauth estaba entre los módulos que enlazaban con connect 1.7.5, después de que npm eliminara everyauth, todos los problemas desaparecieron.

12

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

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

Trabajando como un encanto después de eso.

ver: https://stackoverflow.com/a/10239147/2454820

+0

Recibo el error: se requiere la opción 'secret' para las sesiones de cookie – Maslow

+0

Solo agregue un secreto: app.use (express.cookieSession ({secret: 'mysecret'})); –

+0

Elimina 'app.use (app.router)' y funcionó para mí. (también debía haber agregado el secreto) –

Cuestiones relacionadas