سؤال بخصوص Server Side Rendering أو SSR

تعتبر ميزة ارسال الطلبات من جانب الخادم عملية رائعة واطار عمل nuxt متميز بهذه الخاصية، لكن لدي سؤال هل يمكن ان نجعل جميع الطلبات للباك ايند تتم من جانب السيرفر ؟
يعني غالباً ما يتم استخدام هذه الخاصية من خلال واحدة من هذه:

  • asyncData()
  • fetch()
  • middleware

وجميع هذه تتم في بداية اعداد الصفحة
لكن ماذا لو اردت ان ابعث طلب من جانب الخادم لكن ضمن ال “mounted” في حياة الكمبونينت.
هل من طريقة للقيام بذلك او هل يمكن انا ابعث بيانات تسجيل الدخول للسيرفر والسيرفر يقوم بدوره بمخاطبة الباك ايند؟

2 Likes

الـ mounted lifecycle لا تعمل على السيرفر

الـ server side rendring وظيفته أن يقوم بعمل render للصفحة لديك على مستوى السيرفر وإعادتها لك على المتصفح، لذلك عندما تصل إلى mounted lifecycle أصبحت تعمل على مستوى المتصفح وليس على مستوى السيرفر

كلا asyncData و fetch تعملان للمرة الأولى على مستوى السيرفر، ثم على مستوى المتصفح، لأن السيرفر أصبح خارج العملية

2 Likes

@LouayH شكراً
افهم ذلك لكن هل يمكن ان يوجد طريقة نقوم بذلك من.خلالها؟

1 Like

بما أن mounted lifecycle لا تعمل على السيرفر، ما بعتقد ممكن يكون في طريقة

إذا بتقدر تشرح لي عمليا أو بمثال واقعي شو اللي بدك تعمله، ربما بقدر ساعدك بشكل أفضل

2 Likes

اريد ان لا تظهر عمليات الارسال للapi الخاص بالباك ايند على المتصفح

1 Like

الطلب المُرسل من المتصفح سيظهر حتما :man_shrugging:

يمكن إن ترسل طلب وسيط من المتصفح للباك إند وفي الباك إند تقوم بإرسال الطلب الحقيقي دون أن يظهر في المتصفح

2 Likes

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

1 Like

هل جربت الـ Web Socket؟

2 Likes

لم افعل:thinking::thinking:

1 Like

اذا كنت تستخدم django في الباك اند,توجد مكتبة django channels تقوم بعمل مشابه لما وضحته مهمتها اضافة دعم الاتصالات اللامتزامنه async جانجو.

تقوم بالمحافظه على اتصال مستمر بين ال clients و ال server باستخدام websocket وفي حالة حصول اي تحديث او تنبيه من قبل ال server يقوم بارسال event لكل المستخدمين المتصلين بحيث يقوموا بعمل request جديد وتحديث ال ui تلقائيا بدون الحاجه ل reload.
ايضا يمكن لاي client ارسال event لل server ومن ثم يقوم السرفر بعمل بث لل event لكل المتصلين.

3 Likes

:smiley:عظيم شكراً على التوضيح @ibrahim_badwi
نعم اعمل django في الباك ايند لكن لم اقوم باستخدام هذه المكتبة من قبل.
هل يوجد مكتبة مشابهة في الجافاسكريبت؟

2 Likes

للجافاسكريبت يمكنك استخدام WebSocket API المُدمجة مع المتصفح

3 Likes