بعد الوفاة: اتبع الوسيطة أو كيف كسرنا التعليقات

تحية! ليس لدينا أخبار جيدة للغاية: لقد ارتكبنا خطأ في نسخة الجوال ، مما قد يزعجك طوال العطلات.



جوهر المشكلة: يرسل الشخص تعليقًا إلى منشور ، ويرى ذلك عند تسجيل الدخول ويترك الصفحة ، ولكن إذا قمت بتحديث الصفحة ، فسيكون هذا التعليق بالفعل تحت اسم مستخدم مختلف. هذا يعمل فقط إذا كان المستخدمون في وقت واحد على صفحة واحدة وظيفة.


وفقًا لبياناتنا ، تم إرسال 774 تعليقًا من نسخة الجوال خلال عطلة نهاية الأسبوع. كل واحد منهم يمكن أن يعاني.


بعض التفاصيل الفنية

نستخدم مجموعة من VueJS + NodeJS (Express ، SSR).


يخدم NodeJS اتصالات متعددة في دفق واحد بشكل غير متزامن ، أي أنه يستخدم مثيل واحد لجميع العملاء. هذا يعني أن المتغيرات العامة تتم تهيئتها مرة واحدة فقط وتعيش ما دامت المثيل حية.


لذلك ، يجب أن تكون حذرًا للغاية في أمر تنفيذ middlewar'ov ، وكذلك تعريف وإعادة تعريف قيم المتغيرات (خاصة إذا كانت عالمية).


وهذا ما حدث لنا (هذا مثال على الكود):


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 >>> 'شريط'
  • العميل 2 في /change >>> 'barbar'
  • العميل 1 مرة أخرى على /main >>> 'barbar'

المثال ، بالطبع ، مبسط إلى حد كبير ، ولكن المبدأ هو نفسه.


الآن كل شيء يعمل كما يجب. يرجى مسامحتك للإزعاج ، وإذا كنت متأثرًا بهذه المشكلة ، فيرجى الاتصال بنا من خلال نموذج الملاحظات .


نحن نبحث عن فرصة لإعادة التعليقات إلى أصحابها الشرعيين ، وسنخبرك بما جاء منها لاحقًا.

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


All Articles