Hai Kami tidak memiliki kabar baik: kami membuat kesalahan dalam versi seluler, yang dapat mengganggu Anda selama liburan.

Inti dari masalah: seseorang mengirim komentar ke sebuah posting, melihatnya dengan loginnya dan meninggalkan halaman, tetapi jika Anda me-refresh halaman, komentar ini sudah akan berada di bawah nama pengguna yang berbeda. Ini hanya berfungsi jika pengguna secara bersamaan di halaman satu posting.
Menurut data kami, selama akhir pekan, 774 komentar dikirim dari versi seluler. Masing-masing dari mereka dapat menderita.
Beberapa detail teknisKami menggunakan banyak VueJS + NodeJS (Express, SSR).
NodeJS melayani banyak koneksi dalam satu aliran secara tidak sinkron, yaitu menggunakan satu instance untuk semua klien. Ini berarti bahwa variabel global diinisialisasi hanya sekali dan hidup selama instance masih hidup.
Oleh karena itu, Anda harus sangat berhati-hati tentang urutan pelaksanaan middlewar'ov, serta definisi dan redefinisi nilai-nilai variabel (terutama jika mereka bersifat global).
Dan inilah yang terjadi pada kita (ini adalah contoh kode):
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); });
Apa yang akan dikembalikan server?
- Klien 1 di
/main
>>> 'bar' - Klien 2 di
/change
>>> 'barbar' - Klien 1 lagi di
/main
>>> 'barbar'
Contohnya, tentu saja, sangat disederhanakan, tetapi prinsipnya sama.
Sekarang semuanya berjalan sebagaimana mestinya. Mohon maaf atas ketidaknyamanan ini, dan jika Anda terkena masalah ini, silakan hubungi kami melalui formulir umpan balik .
Kami mencari peluang untuk mengembalikan komentar kepada pemiliknya yang sah, kami akan memberi tahu Anda apa yang terjadi kemudian.