ОБНОВЛЕНИЕ
TL: DR; - robots.txt вызывает проблемы, если их не устранить, установите для DEBUG env значение express-session для устранения неполадок
После долгих размышлений я нашел решение и несколько полезных советов по устранению неполадок.
при запуске приложения запустите его с отладкой, установленной в express-session.
так что для тех из вас, кто новичок в этом, как я, запустите ваше приложение с командой, подобной этой:
DEBUG=express-session node 'bin/www.js'
или
DEBUG=express-session node app.js
в зависимости от того, как вынастройте точку входа вашего приложения.
При этом будут выводиться сообщения журнала, относящиеся к сеансу, чтобы вы могли выяснить, отправляется ли файл cookie с каждым запросом или нет. сообщения об ошибках будут выглядеть примерно так:
express-session fetching 0wgmO1264PsVvqeLqaIIXd6T0ink0zts +34s
express-session session found +49ms
Чтобы устранить проблему, связанную с несколькими запросами, вызывающими несколько сеансов на загрузку страницы, добавьте промежуточное программное обеспечение в верхней части приложения перед любым другим промежуточным программным обеспечением. это позволит нам увидеть URL-адрес запроса и выяснить, какие запросы могут мешать нашим сеансам.
// see what requests are being sent and which ones contain cookies
app.use((req, res, next) => {
const { url } = req;
const isCookieSent = req.headers.cookie;
console.log({ url });
console.log({ isCookieSent });
next();
});
После этого я обнаружил, что виновником был файл robots.txt, по-видимому, единственный путь, которыйпо умолчанию игнорируется значение favicon.ico.
Поскольку этот путь robots.txt не был обработан должным образом, и при этом он не отправлял cookie, он вызывал повторяющиеся запросы и также не сохранял cookie.
Чтобы это исправить, вам нужно либо обработать, либо проигнорировать этот запрос, прежде чем переходить к промежуточному программному обеспечению сеанса.
Я сделал это с помощью этого промежуточного программного обеспечения, еще раз довольно высоко.
app.get('/robots.txt', (req, res) => {
res.type('text/plain');
res.send('User-agent: *\nDisallow: /');
});
Я новичок в node.js, поэтому, если есть кто-то с большим знанием, не стесняйтесь вносить дополнительную информацию или более чистые способы решения этой проблемы. Надеюсь, это избавит некоторых из вас от хлопот!