اذهب إلى المحتوى

السؤال

نشر

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

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

Recommended Posts

  • 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 او اي طريقة تريدها 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...