• 0

كيف استخدم proxy مع إطار العمل express في node.js

لتجنب مشاكل AJAX التابعة لنفس اسم النطاق، أود جعل طرف الخادم من node.js بتحويل جميع الطلبات من مسار محدد (مثال: /api/xxx) إلى خادم آخر (مثال: anotherwebsite.com:5000/xxx) ,ويعيد نفس النتائج التي قد يعيدها الخادم الأول الأساسي دون أن يحدث أي فارق من طرف المستخدم ودون أن يشعر بالفرق. أما بقية المسارات (مثل: api/*) يتم تخديمها من الخادم الأول ولا يتم تحويلها إلى الخادم الثاني. أي فقط مجموعة طلبات محددة سيتم تحويلها وليس جميع الطلبات.

فكيف يمكنني إضافة هذه الطبقة كـ proxy والتي ستقوم بدورها بتحويل هذه الطلبات إلى الخادم الآخر ضمن express.js ؟ هل يوجد كود مباشر أستطيع تضمينه أم أحتاج لتثبيت حزم إضافية لتحقيق ذلك؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يجب عليك استخدام http.request لإنشاء طلب مشابه لواجهة برمجة التطبيقات API البعيد وإرجاع استجابتها.

شيء من هذا:

const http = require('http');


app.post('/api/BLABLA', (oreq, ores) => {
  const options = {
    // المضيف المراد التحويل إليه
    host: 'www.google.com',
    // المنفذ المراد التحويل إليه
    port: 80,
    // المسار المراد التحويل إليه
    path: '/api/BLABLA',
    // دالة الطلب
    method: 'POST',
    // الرؤوس للإرسال
    headers: oreq.headers,
  };

  const creq = http
    .request(options, pres => {
      // تعيين التشفير
      pres.setEncoding('utf8');

      // وضع حالة الطلب بناءً على استجابة الوكيل
      ores.writeHead(pres.statusCode);

      // انتظار البيانات
      pres.on('data', chunk => {
        ores.write(chunk);
      });

      pres.on('close', () => {
        // أُغلق، لنقم بإنهاء طلب العميل ايضاً
        ores.end();
      });

      pres.on('end', () => {
        // انتهى ، لنقم بإنهاء طلب العميل ايضاً
        ores.end();
      });
    })
    .on('error', e => {
      // طباعة الخطأ
      console.log(e.message);
      try {
        // محاولة تعيين رسالة الخطأ وحالة الطلب
        ores.writeHead(500);
        ores.write(e.message);
      } catch (e) {
      }
      ores.end();
    });

  creq.end();
});

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يمكنك عمل ذلك بشكل سهل من خلال ان تقوم ب اعادة توجيه  الطلبات الاتية لخادمك الى الخادم الاخر مباشرة ثم تستقبل النتائج من الخادم الذي وجهت اليه الطلب وتعيد ارسالها للمستخدم الخاص بك او فعل ما تشاء بها 

في المثال التالي استعملت مكتبة axios  كالمثال لكي يجعل خادم express الخاص  بك يعمل كنقطة وصل  

  app.post("/api/endpoint",  function (req, res) {
                    const data = await axios.get(`https://alternativesite.com/`).then(data=>{
                        /// قم بمعالجة البيانات الاتية من الخادم الذي وجهت له الطب او اعد ارسالها للعميلك 

                    }).catch(err=>{
                        /// قم بمعالجة اي مشكل قد يقع في حالة حدوث خطا
                    })
                })

كم يمكنك أيضا عمل post request او اي طريقة تريدها 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن