2014-05-17 42 views
1

我已将我的应用程序从Express.js 3.x迁移到4.x.我已经完成了迁移指南中所述的所有更改。不幸的是,当我尝试从请求对象获取会话时,它是未定义的。从3.x迁移后未定义Express.js 4.x会话

这就是我如何设置express.js尽可能的cookie解析器和会话而言:

app.use(cookieParser()); 
app.use(session({ 
    secret: config.sessionSecret, 
    cookie: { path: '/', httpOnly: false, secure: false, maxAge: null } 
})); 

然后,当我尝试从请求获取会话:

req.session.cookie.maxAge 

会议是不确定的。我不知道为什么。有任何想法吗?

回答

0

最后发现,有两个app.use():

app.use(function (err, req, res, next) { 
    console.error(err.stack); 
    res.status(500).write('500'); 
    res.end(); 
}); 

app.use(function (req, res, next) { 
    res.sendfile(config.root + '/html/404.html'); 
}); 
老了以后

app.use(app.router); 

这是在4.x的版本中删除。在那些app.use()之后有路由定义。

我错过了当迁移到表达4.x时,所有对app.use()的调用应在所有路由后移动。 当我完成它,一切都是好的。

0

从4.0开始,很多中间件不再与Express捆绑在一起。请参阅migration docs。你需要npm install --save express-sessionapp.use require吧。

+0

正如我之前所说,我已经做到了。我已经完成了迁移文档中描述的所有更改。 – Damian

+0

在这种情况下,检查是否在会话中间件之前或之后定义路由。如果路线第一,他们可能没有req.session。转移东西,看看这是否有所作为。 –

+0

我以前也做过。仍然错误。 – Damian