Экспресс-сессия не сохраняется

Я знаю, что другие люди сталкивались с этим, но мой сеанс 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.info(req.session);

    ...the rest of the route...

    res.render('pages', {
        key: val,
        anotherKey: anotherVal
    }
});

Кроме того, для некоторого контекста я возвращаю визуализированную страницу EJS, так что это то, что рендерит в конце.

🤔 А знаете ли вы, что...
С Node.js можно легко создавать RESTful API с использованием фреймворков, таких как Express.js.


16
1

Ответ:

Решено

Проблема может быть в этом коде здесь:

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, и ваше значение будет увеличено.