我知道其他人也遇到过这种情况,但是我的Express会话没有保存。我浏览了尽可能多的问题和线索,但我不能找到一个解决方案。请让我知道我做错了什么。谢谢!
这里是初始化的地方:
app.use(session({
secret: 'BigSecret',
resave: true,
cookie: {
maxAge: 24 * 60 * 60 * 1000 * 7, //seven days
secure: false
},
saveUninitialized: true
}));
以及在路由中使用的地方:
router.get('/route', async (req, res) => {
if (!req.session.views) {
req.session.views = 0;
} else {
req.session.views++
}
console.log(req.session);
...the rest of the route...
res.render('pages', {
key: val,
anotherKey: anotherVal
}
});
另外,对于某些上下文,我将返回一个渲染的EJS页面,因此这就是最后的渲染。
问题可能在这里的代码中:
if (!req.session.views) {
req.session.views = 0;
} else {
req.session.views++;
}
第一个请求,req.session.views
的值将是undefined
,因此!req.session.views
的值将计算为true
,并且将值设置为0
。
下一个请求,以及之后的每个请求,req.session.views
的值都将是0
。每次!0
将求值为true
,您只需再次将值设置为0
。
你可能想把它改成if (!('views' in req.session))
或if (typeof req.session.views === 'undefined')
等。
或者,您可能希望只在第一个请求上设置req.session.views = 1;
,因为这是第一个视图。然后在第二次请求时,!req.session.views
将是!1
,其将计算为false
,并且您的值将增加。