Я недавно переключил свой проект с обычного JavaScript на машинопись. Все работает нормально, за исключением обработки сеанса.
Пока это мой проект:
Server.ts
App.ts
/db/mongo/MongoHandler.ts
и некоторые другие вещи, но это не должно иметь значения для этой проблемы
MongoHandler.ts имеет функцию, которая подключается к базе данных mongo и возвращает обещание с объектом mongoose.connection.
Связь с mongodb работает нормально.
Inside App.ts:
class App {
public app: express.Application;
private routes: Routes;
constructor() {
this.app = express();
this.config();
}
private config(): void {
//define less middleware
this.app.use(less(path.join(__dirname, 'public')));
//define static directory
this.app.use(express.static(path.join(__dirname, 'public')));
//define favicon
this.app.use(favicon(path.join(__dirname, 'public', 'images', 'favicon.ico')));
//add support for POST messages and cookies
this.app.use(express.json());
this.app.use(express.urlencoded({extended: false}));
this.app.use(cookieParser());
//define view engine
this.app.set('views', path.join(__dirname, 'views'));
this.app.set('view engine', 'pug');
//mongo connection
//session handling
//loading config
this.app.set('config', new ConfigHandler());
//setup sessions
var expiryDate = new Date(Date.now() + 60 * 60 * 1000);
const MongoStore = connectMongo(session);
const mongoHandler = new MongoHandler();
mongoHandler.connect(this.app).then(connection => {
this.app.use(session({
secret: 'supersecret',
store: new MongoStore({mongooseConnection: connection}),
resave: false,
saveUninitialized: true,
cookie: {
secure: false,
expires: expiryDate
}
}));
});
this.app.set('mongo', mongoHandler);
//define routes
this.routes = new Routes(this.app);
this.routes.routes();
}
}
export default new App().app;
Так что в основном каждый app.use работает, кроме сессионного материала.
req.session не определяется при каждом запросе.
Я знаю, что что-то упустил, но не могу понять.
Это тот же код, что и в старой версии javascript, который отлично работает.