2012-03-29 5 views
8

Ich versuche, das eingebaute cookieSession Objekt der Verbindung zu verwenden, aber ich kann es nicht richtig mit Express arbeiten.Wie cookieSession in express verwenden

Ich habe diese App:

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); 

Ich erhalte diese Fehlermeldung:

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

Irgendwelche Ideen?

dank

+0

Jede besonderen Grund Sie connect.cookieSession statt express.cookieSession verwenden? –

+1

@AndersBornholm die Frage ist ziemlich alt, es war wahrscheinlich zu diesem Zeitpunkt nicht verfügbar – mihai

Antwort

1

Was ist die Version Ihres connect-Modul? Die cookieSession Middleware wurde erstmals in der Version 2.0.0 hinzugefügt. Führen Sie npm list|grep connect aus, um sicherzustellen, dass Ihre connect-Version mindestens 2.0.0 oder höher ist.

+0

Express kommt mit Connect 1.8.6, also ja, das ist wahrscheinlich, warum es nicht funktioniert. Danke – mihai

+2

Express 3 kommt mit Connect 2.7. – UpTheCreek

1

Ich hatte dieses Problem auch. Es stellte sich heraus, dass everyauth zu den Modulen gehörte, die mit connect 1.7.5 verknüpften, nach npm löschte jederauth, alle Probleme verschwanden.

12

Sessions werden nicht funktionieren, wenn Sie diese 3 in dieser Reihenfolge haben:

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

wie ein Zauber danach arbeiten.

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

+0

Ich bekomme Fehler: 'Geheime' Option für Cookie-Sitzungen erforderlich – Maslow

+0

Fügen Sie einfach ein Geheimnis hinzu: app.use (express.cookieSession ({secret: 'mysecret'})); –

+0

Entfernen Sie die 'app.use (app.router)' und es funktionierte für mich. (musste auch das Geheimnis hinzufügen) –