Post mortem: siga el middleware o c贸mo rompimos los comentarios

Hola No tenemos muy buenas noticias: cometimos un error en la versi贸n m贸vil, que podr铆a molestarlo todas las vacaciones.



La esencia del problema: una persona env铆a un comentario a una publicaci贸n, lo ve con su inicio de sesi贸n y abandona la p谩gina, pero si actualiza la p谩gina, este comentario ya estar谩 bajo un nombre de usuario diferente. Esto solo funcionaba si los usuarios estaban simult谩neamente en la p谩gina de una publicaci贸n.


Seg煤n nuestros datos, durante el fin de semana, se enviaron 774 comentarios desde la versi贸n m贸vil. Cada uno de ellos podr铆a sufrir.


Algunos detalles t茅cnicos

Usamos un mont贸n de VueJS + NodeJS (Express, SSR).


NodeJS sirve m煤ltiples conexiones en una sola secuencia de forma asincr贸nica, es decir, utiliza una instancia para todos los clientes. Esto significa que las variables globales se inicializan solo una vez y viven mientras la instancia est茅 viva.


Por lo tanto, debe tener mucho cuidado con el orden de ejecuci贸n de middlewar'ov, as铆 como con la definici贸n y redefinici贸n de valores variables (especialmente si son globales).


Y esto es lo que nos pas贸 (este es un ejemplo de c贸digo):


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); }); 

驴Qu茅 devolver谩 el servidor?


  • Cliente 1 en /main >>> 'barra'
  • Cliente 2 en /change >>> 'barbar'
  • Cliente 1 nuevamente en /main >>> 'barbar'

El ejemplo, por supuesto, se simplifica enormemente, pero el principio es el mismo.


Ahora todo funciona como deber铆a. Perdone las molestias y, si se ve afectado por este problema, cont谩ctenos a trav茅s del formulario de comentarios .


Estamos buscando la oportunidad de devolver los comentarios a sus leg铆timos propietarios, le diremos lo que surgi贸 m谩s adelante.

Source: https://habr.com/ru/post/443268/


All Articles