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

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

Что такое «сохранение»? В базу данных? Или где?

Vasyl Boroviak 17.05.2022 04:03

Поскольку вы используете resave, я могу предположить, что проблема в другом пути. (npmjs.com/package/express-session#user-content-resave) Это работает с resave: false?

Christian Fritz 17.05.2022 04:04

Экспресс-сессии @VasylBoroviak используют сохранение памяти, если не указано иное

LUKER 17.05.2022 04:09

@ChristianFritz, это была моя первоначальная мысль, поэтому я тестировал только один маршрут.

LUKER 17.05.2022 04:10
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
4
16
1
Перейти к ответу Данный вопрос помечен как решенный

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

Отличный улов. Мне очень нравится req.session.views ??= 1 как простой однострочный вариант

Phil 17.05.2022 04:12

^^ Для настоящего отличного улова! Спасибо! (лол, я тоже извиняюсь)

LUKER 17.05.2022 04:16

Другие вопросы по теме