Как получить постоянный сеанс работы с Express.js / Nodemon? - PullRequest
0 голосов
/ 05 ноября 2018

Мой сервер 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 Ответ

0 голосов
/ 05 ноября 2018

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

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

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

...