2013-03-12 16 views
29

Jestem nowy wyrazić ramy i tutaj jest to, co mam w pliku server.js:coraz dziwny błąd w sesji w wyraźnej ramach

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

Kiedy przejść do localhost: 3000 uzyskać ten błąd

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

Gdzie jest problem?

Odpowiedz

75

Teraz brakuje cookieParser middleware:

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

(ponieważ sesje są realizowane za pomocą plików cookie).

+0

i jak używać zmiennych sesji? Używam request.session.email = usr jako skomentowane w kodzie, ale generuje błąd o niezdefiniowanym ... – beNerd

+1

Musisz przenieść 'app.use (app.router)' poniżej wszystkich tras. – robertklep

+0

tak, zadziałało. Czy możesz mi pomóc zrozumieć tę koncepcję dodawania stosu oprogramowania pośredniego? mam na myśli, jak porządek robi różnicę i dlaczego? Dzięki. – beNerd

0

Miałem ten sam problem.

należy nazywając

app.use(express.cookieParser()); 

przed

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

Powiązane problemy