Привет! У нас не очень хорошие новости: мы допустили ошибку в мобильной версии, которая может беспокоить вас все праздники.
Суть проблемы: человек оставляет комментарий к посту, видит его под своим логином и уходит со страницы, но если вы обновите страницу, этот комментарий окажется под другим логином.
Это работало только в том случае, если пользователи одновременно находились на одной и той же странице публикации.
По нашим данным, за выходные с мобильной версии было отправлено 774 комментария.
Любой из них мог пострадать.
Некоторые технические подробности Мы используем комбинацию VueJS + NodeJS (Express, SSR).
NodeJS одновременно обслуживает несколько соединений асинхронно в одном потоке, то есть использует один экземпляр для всех клиентов.
Это означает, что глобальные переменные инициализируются только один раз и действуют до тех пор, пока жив экземпляр.
Поэтому необходимо крайне внимательно относиться к порядку выполнения мидлваров, а также к определению и переопределению значений переменных (особенно если они глобальные).
И вот что у нас произошло (это пример кода):
global.foo = 'bar'; app.get('/main', (req, res, next) => { res.send(global.foo); }); app.get('/change', (req, res, next) => { global.foo = global.foo === 'bar' ? 'barbar': 'bar'; res.send(global.foo); });
Что вернет сервер?
- Клиент 1 включен
/main
>>> ‘bar’ - Клиент 2 включен
/change
>>> ‘barbar’ - Клиент 1 снова включен
/main
>>> ‘barbar’
Теперь все работает как надо.
Пожалуйста, простите за неудобства.
Если вас затронула эта проблема, свяжитесь с нами по форма для обратной связи .
Ищем возможность вернуть комментарии их законным владельцам, что из этого получилось, расскажем позже.
Теги: #баги #habr #разработка сайтов #vue.js #node.js #мобильная версия #post mortem
-
Почему Звезды Взрываются?
19 Oct, 24 -
Как Подружиться С React И D3
19 Oct, 24 -
Порт Sifr На Silverlight
19 Oct, 24