Как получить постоянный сеанс работы с 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