Всем привет,
подскажите кто сталкивался с такой проблемой:
Запускаем локально проект:
- на localhost:4000 - express API, которая общается с другим микросервисом
- на localhost:4200 - angular (ng serve) в режиме SPA (для локальной разработки)
и все хорошо было,
до того момента пока у нас не появились сессии (express-session в связке с redis):
import * as session from 'express-session';
const config = CONFIG.external.redis || {};
export const redisClient = redis.createClient({
port: config.port,
host:
config.host,
ttl: config.ttl,
});
private mountSessions(): void {
const sessionTime = 300; // 86400;
const store = new RedisStore({ client: redisClient });
this.express.use(session({
secret: CONFIG.scope,
resave: true,
saveUninitialized: true,
store,
}));
}
Сессии у нас работают,
но - только если мы соберем SSR версию приложения,
и оно запустится все вместе на 4000 порту.
Но сборка занимает около 2 мин.
Но каждый раз писать код и собирать 2 мин - это жестко.
А при попытке зайти с 4200 на 4000 порт,
все данные по сессиям не доступны.
Отдает объект {cookie:...}, но данных там нет,
и установить не получается элементарный counter
if (req.session.views) {
req.session.views++;
} else {
req.session.views = 1;
}
res.end();
Я так понимаю проблема в том,
что express-session создает cookie: connect.sid с токеном сессии,
для 4200, и теряет реальную сессию на 4000 порту.
Я вижу 2 варианта решения
(но у меня не получается их прикрутить):
- както пробрасывать сессии между портами (не понятно как, возможно заставить этот хэш сессии не в cookie писать)
- запуск проекта в режиме SSR:watch на одном 4000 порту
PS: вот ковыряю стартер, пока не удалось перенести логику "ssr:watch" к себе в приложение.
Буду рад любым советам, спасибо!