如何使用 Express.js/Nodemon 获得持续会话?
How do I get a persistent session working with Express.js/Nodemon?
我的 TypeScript 服务器基于 this example project。每当 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 在每次重新启动时丢失我的会话?
express-session
支持不同的存储(数据库)来存储会话数据。
使用的默认设置是 MemoryStore
,只要 Express 进程运行 ,它就会将会话数据保存在内存中 。当 Express 进程停止时(例如,当它重新启动时),所有会话数据都消失了。
如果您希望会话数据在重启后仍然存在,您需要使用持久会话存储。它们不是将会话数据存储在内存中,而是将会话数据存储在(例如)数据库中。有大量可用的持久会话存储,可在此处找到其中的列表:https://github.com/expressjs/session#compatible-session-stores
我的 TypeScript 服务器基于 this example project。每当 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 在每次重新启动时丢失我的会话?
express-session
支持不同的存储(数据库)来存储会话数据。
使用的默认设置是 MemoryStore
,只要 Express 进程运行 ,它就会将会话数据保存在内存中 。当 Express 进程停止时(例如,当它重新启动时),所有会话数据都消失了。
如果您希望会话数据在重启后仍然存在,您需要使用持久会话存储。它们不是将会话数据存储在内存中,而是将会话数据存储在(例如)数据库中。有大量可用的持久会话存储,可在此处找到其中的列表:https://github.com/expressjs/session#compatible-session-stores