Как получить постоянный сеанс работы с Express.js/Nodemon?

Мой сервер TypeScript основан на этом примере проекта. Всякий раз, когда nodemon перезапускает мой сервер, автоматически или вручную, я теряю сеанс и должен снова войти в систему. Я ненавижу это, потому что это огромная трата времени, когда это делается в 1000-й раз. Я попытался настроить параметры сеанса Express.js, но, похоже, ничего не работает. Вот моя конфигурация:

/**
* Configure application
*
* @class Server
* @method config
*/
public config() {
    //add static paths
    this.app.use(express.static(path.join(__dirname, 'public')));

    //configure pug
    this.app.set('views', path.join(__dirname, 'views'));
    this.app.set('view engine', 'ejs');

    //use logger middlware
    this.app.use(logger('dev'));

    //use json form parser middlware
    this.app.use(bodyParser.json());

    //use query string parser middlware
    this.app.use(bodyParser.urlencoded({
        extended: true
    }));

    this.app.use(cookieParser("my secret"));
    this.app.use(session({
        name: 'MyStudio',
        secret: "my secret",
        resave: false,
        saveUninitialized: false,
        cookie: {
            maxAge: 86400000,
            httpOnly: true,
            secure: false
        }
    }));
    this.app.use(passport.initialize());
    this.app.use(passport.session());
    //this.app.set('trust proxy', 1) // trust first proxy

    this.app.set('json spaces', 4);

    passport.serializeUser((user, done) => {
        return done(null, user);
    });

    passport.deserializeUser((user, done) => {
        return done(null, user);
    });

    passport.use('local-login', new Local.Strategy(
        (username, password, done) => {
            // My custom login logic
        }
    ));

    this.app.use(methodOverride());
}

Как остановить Express.js от потери сеанса при каждом перезапуске?

1 ответ

Решение

express-session имеет поддержку различных хранилищ (баз данных) для хранения данных сеанса.

По умолчанию используется MemoryStore который хранит данные сеанса в памяти до тех пор, пока выполняется процесс Express. Когда процесс Express останавливается (например, когда он перезапускается), все данные сеанса исчезают.

Если вы хотите, чтобы данные сеанса перезапускались, вам нужно использовать постоянное хранилище сеансов. Вместо сохранения данных сеанса в памяти они сохраняют данные сеанса (например) в базе данных. Существует множество постоянных хранилищ сеансов, список которых можно найти здесь: https://github.com/expressjs/session

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