2013-03-12 2 views
29

: Ich bin Rahmen auszudrücken und hier ist das, was ich in der server.js Datei:immer seltsame Fehler in Sitzungen in Express Rahmen

// Module dependencies. 
var application_root = __dirname, 
express = require('express'), //Web framework 
path = require('path'), //Utilities for dealing with file paths 
mongoose = require('mongoose'); //MongoDB integration 

//Create server 
var app = express(); 

// Configure server 
app.configure(function() { 

app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.session({secret:'thisismysupersecret'})); 
app.use(express.static(path.join(application_root, 'site'))); 
app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 
app.post("/verifyLogin",function(request,response){ 
var usr=request.body.username; 
var pass=request.body.password; 
//request.session.email=usr; 
response.redirect('dashboard'); 
}); 

//Start server 
var port = 3000; 
app.listen(port, function() { 
console.log('Express server listening on port %d in %s mode', port, app.settings.env); 
}); 

Wenn ich navigieren zu localhost: 3000 erhalte ich diesen Fehler

500 TypeError: Cannot read property 'connect.sid' of undefined

Wo ist das Problem?

Antwort

75

Sie verpassen die cookieParser Middleware:

... 
app.use(express.cookieParser()); 
app.use(express.session({secret:'thisismysupersecret'})); 
... 

(seit Sitzungen verwenden Cookies implementiert).

+0

und wie Session-Variablen benutzen? Ich benutze request.session.email = usr wie im Code kommentiert, aber es wirft einen Fehler von undefined ... – beNerd

+1

Sie müssen 'app.use (app.router)' unter alle Ihre Routen verschieben. – robertklep

+0

ja, es hat funktioniert. Können Sie mir helfen, dieses Konzept des Hinzufügens von Middleware-Stack zu verstehen? Ich meine, wie die Bestellung den Unterschied macht und warum? Vielen Dank. – beNerd

0

Ich hatte das gleiche Problem.

sicher sein

dem Aufruf
app.use(express.cookieParser()); 

vor

app.use(express.session({secret:'thisismysupersecret'}));