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

السؤال

نشر

بفرض لدي المسار التالي لطلب بعض المعلومات من خادم الويب:

http://mywebsite.com/test/test2

وأرغب بالحصول على هذا المسار كاملاً فقمت بوضع مسار التوجيه هذا ضمن express:

app.get('/test/test2', function (req, res) {
    let url = req.url;
}

ولكنني أحصل فقط على /test و /test2 بشكل معزول.

كيف يمكنني الحصول على كامل المسار الذي تم طلبه من قبل العميل؟

Recommended Posts

  • 1
نشر

نحصل على هذه المعلومات وغيرها من خلال الطلب نفسه req الذي يقوم بتفسيره إطار العمل express مما يمكننا من استخدامه بشكل مباشر ضمن الكود.

يتم الوصول إلى البروتوكول المستخدم في الاتصال عبر express من خلال:

req.protocol

أما قبل النسخة الثالثة من express فيكون البروتوكول ثابت دوماً كـ http إلا إذا تم ذكر السطر البرمجي التالي ضمن الكود بالتالي سيكون https:

req.get('X-Forwarded-Protocol')

أما المضيف host فيمكن الحصول عليه من خلال:

req.get('host')

وفي حال لم ترغب بتجميع هذه العناصر مع بعضها البعض، يمكنك ببساطة استخدام API الذي يقدمها node.js الخاصة بالمسارات بالشكل التالي:

var url = require('url');

function getFullURL(req) {
  return url.format({
    protocol: req.protocol,
    host: req.get('host'),
    pathname: req.originalUrl
  });
}

وبعدها يمكنك استدعاء التابع السابق بشكل مباشر عند الحاجة.

 

  • 1
نشر

بالطبع يمكنك الحصول على ال url كما في التعليقات السابقة من خلال 

 var url = req.protocol + '://' + req.get('host') + req.originalUrl;

ولكن حتى يكون ال req.get('host') صحيح بدون أي مشاكل أو يقوم بإرجاع النتائج المتوقعة يجب أن تقوم ب 

  • إضافة الكود التالي في ملف ال app.js 
    app.set('trust proxy', 'loopback');

    لمعالجة النتائج الغير متوقعة من ال proxies

  • تحديد ال X-Forwarded-Host في إعدادات السيرفر في nginx

    server {
        listen myhost:80;
        server_name  myhost;
        location / {
            root /path/to/myapp/public;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://myapp:8080;
        }
    }

    وال apache

    <VirtualHost myhost:80>
        ServerName myhost
        DocumentRoot /path/to/myapp/public
        ProxyPass / http://myapp:8080/
        ProxyPassReverse / http://myapp:8080/
    </VirtualHost>

     

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...