Node.js, express-session, express-mysql-session данные сессии записываются в устаревшую сессию

Давно не могу решить проблему: при переходе на главную страницу сайта выполняется GET-запрос, но в нём просроченная сессия и в неё записываются данные, потом в app.use создаётся новая сессия, но данные были записаны в другую, поэтому новая сессия практически пустая, это и приходит на клиент (в браузер). Подскажите пожалуйста как решить проблему. Код следующий:

const mysql = require("mysql");
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')
const session = require('express-session')
const MySQLStore = require('express-mysql-session')(session)
const sessionStore = new MySQLStore({
    createDatabaseTable: false,
    schema: {
        tableName: 'sessions_storage',
        columnNames: {
            session_id: 'session_id',
            expires: 'expires',
            data: 'data'
        }
    }
}/* session store options */, gPool);

// Инициализация сессии
let secretKey = 'key123'
app.use(cookieParser(secretKey));
app.use('/', (request, response, next) => { // проверочный для тестирования
    let session = request.sessionID
    console.log('use-1 session:', session)
    next()
})
app.use('/',
    session({
        name: 'vanilla.ru-session',
        store: sessionStore,
        domain: 'localhost',
        cookie: {maxAge: 3600 * 1000 * 24},
        secret: secretKey,
        httpOnly: true,
        resave: true,
        saveUninitialized: true,
    })
)
app.use('/', (request, response, next) => { // проверочный для тестирования
    let session = request.sessionID
    console.log('use-2 session:', session)
    next()
})
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.get('/', (request, response) => {
    console.log('======================= GET-main =======================')
    request.session.counter = request.session.counter || 0
    request.session.counter += 1
    let date = getDate()
    try {
        let session = request.sessionID
        console.log('session:', session)
        if(session && request.session){
            let timestamp = request.session.timestamp
            if(!request.session.fails && request.session.fails != 0){request.session.fails = 4}
            else if(timestamp){
                let nowTime = Math.floor(Date.now() / 1000)
                let passed = nowTime - timestamp
                console.log('passed:', passed)
                if(passed > 10){request.session.fails = 4; request.session.timestamp = null}
            }
            response.render('pageMain')
            console.log('response-pageMain отправлен')
        }
        else {throw new Error('ошибка сессии.')}
    }
    catch(err){
        console.log('err-GET-main', err)
        response.render('pageMain')
        saveErrLog(err, date, `GET-main`, 'errorLogs_Get_Post')
    }
})
app.post('/main', (request, response) => {
    console.log('======================= POST-main =======================')
    let date = getDate()
    try {
        let session = request.sessionID
        console.log('session:', session)
        // здесь убрал ненужный код
    }
    catch(err){
        console.log('err-POST-main', err)
        response.status(500).send('Ошибка!')
        saveErrLog(err, date, `POST-main`, 'errorLogs_Get_Post')
    }
})

Вывод в терминал:

  • Сервер запущен: http://localhost:3000
  • use-1 session: undefined
  • use-2 session: 2_v5Zf86d7r-BqyhyRvYscUS4z0T9zrY
  • ======================= GET-main =======================
  • session: 2_v5Zf86d7r-BqyhyRvYscUS4z0T9zrY
  • response-pageMain отправлен
  • use-1 session: undefined
  • use-2 session: 0hgMKJSBiH9Wozh_4bK50JbTo-xGEeCm
  • ======================= POST-main =======================
  • session: 0hgMKJSBiH9Wozh_4bK50JbTo-xGEeCm

Ответы (0 шт):