node.js - एक्सप्रेस में पूरा यूआरएल कैसे प्राप्त करें?




url express (9)

  1. प्रोटोकॉल req.protocol रूप में उपलब्ध है। यहां दस्तावेज़

    1. एक्सप्रेस 3.0 से पहले, प्रोटोकॉल जिसे आप http मान सकते हैं, जब तक कि आप देखते हैं कि req.get('X-Forwarded-Protocol') सेट है और मान https , जिस स्थिति में आप जानते हैं कि आपका प्रोटोकॉल है
  2. मेजबान req.get('host') से आता है क्योंकि गोपाल ने संकेत दिया है

  3. उम्मीद है कि आपको अपने यूआरएल में एक गैर-मानक बंदरगाह की आवश्यकता नहीं है, लेकिन अगर आपको इसे जानने की ज़रूरत है तो आपके पास यह आपके आवेदन स्थिति में होगा क्योंकि यह सर्वर स्टार्टअप समय पर app.listen पर जो भी हो गया है। हालांकि, गैर-मानक बंदरगाह पर स्थानीय विकास के मामले में, क्रोम में होस्ट हेडर में बंदरगाह शामिल है, इसलिए req.get('host') लौटाता है localhost:3000 , उदाहरण के लिए। तो कम से कम एक मानक बंदरगाह पर उत्पादन स्थल के मामलों के लिए और सीधे अपने एक्सप्रेस ऐप (बिना रिवर्स प्रॉक्सी के) ब्राउज़ करना, host हेडर यूआरएल में बंदरगाह के बारे में सही काम करता है।

  4. पथ req.originalUrl (धन्यवाद @pgrassant) से आता है। ध्यान दें कि इसमें क्वेरी स्ट्रिंग शामिल है। req.url और req.originalUrl पर यहां दस्तावेज़ । URL के साथ आप जो करना चाहते हैं उसके आधार पर, req.url की तुलना में req.url सही मान हो सकता है या नहीं भी हो सकता है।

पूर्ण यूआरएल का पुनर्निर्माण करने के लिए उन सभी को एक साथ मिलाएं।

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

मान लें कि मेरा नमूना यूआरएल है

http://example.com/one/two

और मैं कहता हूं कि मेरे पास निम्न मार्ग है

app.get('/one/two', function (req, res) {
    var url = req.url;
}

url का मूल्य /one/two

मैं एक्सप्रेस में पूरा यूआरएल कैसे प्राप्त करूं? उदाहरण के लिए, उपर्युक्त मामले में, मैं http://example.com/one/two प्राप्त करना चाहता हूं।


prq.host/req.hostname प्रभावी बनाने के लिए प्रॉक्सी के पीछे एक्सप्रेस होने पर दो शर्त होनी चाहिए:

  1. app.set('trust proxy', 'loopback'); app.js में
  2. X-Forwarded-Host हेडर को आपके द्वारा वेबसर्वर में निर्दिष्ट किया जाना चाहिए। जैसे। अपाचे, nginx

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;
    }
}

अपाचे :

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

आपको req.headers.host + req.url का उपयोग करके इसे बनाने की आवश्यकता है। बेशक अगर आप एक अलग बंदरगाह में होस्टिंग कर रहे हैं और आपको यह विचार मिलता है ;-)


इसे इस्तेमाल करो,

var url = req.headers.host + '/' + req.url;


मुझे वास्तव में पता चला कि नीचे दिए गए कोड का उपयोग करके आप अपना यूआरएल प्राप्त कर सकते हैं। फिर इसे फिसलने और आगे क्या तय करने के लिए आगे बढ़ें।

app.use(function(req, res, next) {
console.log(req.originalUrl);
res.send(req.originalUrl);
  });

मेरा कोड इस तरह दिखता है,

params['host_url'] = req.protocol + '://' + req.headers.host + req.url;


मैं यूआरएल के बजाय originalUrl का उपयोग करने का सुझाव दूंगा:

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

यहां मूल यूआरएल का विवरण देखें: http://expressjs.com/api.html#req.originalUrl

हमारी प्रणाली में, हम ऐसा कुछ करते हैं, इसलिए मूल यूआरएल हमारे लिए महत्वपूर्ण है:

  foo = express();
  express().use('/foo', foo);
  foo.use(require('/foo/blah_controller'));

blah_controller इस तरह दिखता है:

  controller = express();
  module.exports = controller;
  controller.get('/bar/:barparam', function(req, res) { /* handler code */ });

तो हमारे यूआरएल प्रारूप है:

www.example.com/foo/bar/:barparam

इसलिए, हमें बार नियंत्रक में req.originalUrl की आवश्यकता है हैंडलर प्राप्त करें।


यूआरएल प्राप्त करने के लिए रिक्त ऑब्जेक्ट पर कॉल करने वाले फ़ंक्शन को जोड़ने का एक शानदार तरीका यहां दिया गया है

  app.use(function(req, res, next) {
    req.getUrl = function() {
      return req.protocol + "://" + req.get('host') + req.originalUrl;
    }
    return next();
  });

अब आपके पास एक ऐसा फ़ंक्शन है जिसे आप मांग पर कॉल कर सकते हैं यदि आपको इसकी आवश्यकता है।


var full_address = req.protocol + "://" + req.headers.host + req.originalUrl;

या

var full_address = req.protocol + "://" + req.headers.host + req.baseUrl;`




express