快速会话不保存

Express Session Not Saving

我知道其他人对此有 运行,但我的 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,并且您的值将增加。