Я знаю, что другие люди сталкивались с этим, но мой сеанс 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.
Проблема может быть в этом коде здесь:
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
, и ваше значение будет увеличено.