2014-03-01 89 views
0

我正在使用使用会话变量的Express和Node.js创建一个简单的项目,并且我在浏览器中有一个错误,我不知道为什么。错误是:Node.js + Express中会话变量的错误

Express 
500 TypeError: Cannot read property 'variable' of undefined 
at /Users/jorgeregidor/zzz/app.js:44:24 
etc.... 

这是当你不声明变量会话()出现相同的错误,但你可以在代码中看到如下定义如下:

应用。使用(express.cookieParser()); (express.session({secret:“secret”}));

的在app.js代码的其余部分是:

var express = require('express'); 
var routes = require('./routes'); 
var user = require('./routes/user'); 
var database = require('./routes/database') 
var http = require('http'); 
var path = require('path'); 


var app = express(); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.cookieParser()); 
app.use(express.session({secret : "secret"})); 
app.use(express.static(path.join(__dirname, 'public'))); 

// development only 
if ('development' == app.get('env')) { 
     app.use(express.errorHandler()); 
} 

app.get('/', routes.index); 


app.get('/users', database.show); 
app.post('/users', database.add); 
app.post('/users/del', database.del); 

app.get('/autenticacion',database.autenticar); 

app.post('/autenticacion',function(req, res){ 
req.session.variable = req.body.name; **//ERROR** 
res.redirect('/secreta'); 
}); 

app.get('/secreta',function (req,res){ 
if (typeof(req.session.variable) != "undefined") **//ERROR** 
    { res.render('secreta',{titulo:'secreta'});} 
else {res.rendirect('/autenticar');} 
}); 



http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

回答

1

这是因为app.router是express.session之前启动。你没有按照正确的顺序做事。

变化:

app.use(app.router); 
app.use(express.cookieParser()); 
app.use(express.session({secret : "secret"})); 

要这样:

app.use(express.cookieParser()); 
app.use(express.session({secret : "secret"})); 
app.use(app.router); 
+0

感谢你这么多! – jorgeregidor

+0

de nada mi amigo! :) –