2011-11-10 35 views
0

我正在尝试使用Express中的会话。我尽可能小心地阅读了文档,但在代码和示例之间找不到任何区别 - 但是,会话似乎没有初始化。Express中的会话不起作用

这里是我的app.js

var express = require('express') 
    , routes = require('./routes') 
    , customRoutes = require('./routes/custom.js'); 

var app = module.exports = express.createServer(); 

// Configuration 

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 

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

}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 

// Routes 

app.get('/', function(req, res){ 

    req.session.something = "please?"; 
    req.session.boo = true; 
    req.session.int = 100; 

    console.log(req.session); // undefined 
}); 

当我运行它的开始:类型错误:无法设置属性未定义的“东西”。

检查什么?

$ npm ls 

ââ⬠[email protected] 
â âââ [email protected] 
â ââ⬠[email protected] 
â âââ [email protected] 
ââ⬠[email protected] 
â âââ [email protected] 
â âââ [email protected] 
â âââ [email protected] 
â âââ [email protected] 
âââ [email protected] 
+0

请,将问题的名称改为有意义的。 – sorin

回答

5

您没有指定任何会话存储,检查这里的例子:https://github.com/alessioalex/Nodetuts/blob/master/express_samples/app.js#L15-31

例如指定内存存储(这是确定仅用于开发):

var MemStore = express.session.MemoryStore; 
... 
app.use(express.session({secret: 'secret_key', store: MemStore({ 
    reapInterval: 60000 * 10 
})})); 
+0

谢谢,这个伎俩。 – Apeli

+0

使用内存进行生产不行吗? –

+3

由于进程死亡并重新启动,它不好,它会丢失所有会话数据(包含该进程)。您应该使用Redis商店或MongoDB商店:https://github.com/visionmedia/connect-redis和https://github.com/kcbanner/connect-mongo – alessioalex