मैं एक्सप्रेस.जेएस में अनुरोध को उत्पन्न करने वाला डोमेन कैसे प्राप्त करूं?


84

मैं express.js का उपयोग कर रहा हूं और मुझे उस डोमेन को जानना होगा जो कॉल की उत्पत्ति कर रहा है। यह सरल कोड है

app.get(
    '/verify_license_key.json',
    function( req, res ) {
        // do something

मैं डोमेन reqको resऑब्जेक्ट या ऑब्जेक्ट से कैसे प्राप्त करूं ? मेरा मतलब है कि मुझे यह जानने की जरूरत है कि क्या एपीआई somesite.com या someothersite.com द्वारा बुलाया गया था। मैं दोनों का एक console.dir कर की कोशिश की reqऔर resलेकिन मैं वहाँ से कोई पता नहीं है, यह भी दस्तावेज़ पढ़ें, लेकिन यह मुझे कोई मदद नहीं दी।


1
कोशिश करें: req.hostया req.get('host') डॉक्स को व्यक्त करें
dc5

2
नोड.जेएस: req.headers["x-forwarded-for"] || req.connection.remoteAddress x-फॉरवर्ड किए गए आपके प्रॉक्सी को एक प्रॉक्सी, लोड बैलेंसर के पीछे से कवर किया जाएगा ...
Joes

मुझे यह चेतावनी मिलती है: व्यक्त पदावनत req.host: index.js के बजाय req.hostname का उपयोग करें: 20: 8
एडम एफ

जवाबों:


142

आपको इसे HOSTहेडर से पुनः प्राप्त करना होगा ।

var host = req.get('host');

यह HTTP 1.0 के साथ वैकल्पिक है, लेकिन 1.1 द्वारा आवश्यक है। और, एप्लिकेशन हमेशा अपनी खुद की आवश्यकता को लागू कर सकता है।


यदि यह क्रॉस-ऑरिजिन अनुरोधों को सपोर्ट करने के लिए है , तो आप इसके बजाय Originहेडर का उपयोग करेंगे ।

var origin = req.get('origin');

ध्यान दें कि कुछ क्रॉस-मूल अनुरोधों को " प्रीफ़लाइट " अनुरोध के माध्यम से सत्यापन की आवश्यकता होती है :

req.options('/route', function (req, res) {
    var origin = req.get('origin');
    // ...
});

यदि आप ग्राहक के आईपी की तलाश कर रहे हैं, तो आप इसे पुनः प्राप्त कर सकते हैं:

var userIP = req.socket.remoteAddress;

ध्यान दें कि, यदि आपका सर्वर प्रॉक्सी के पीछे है, तो यह आपको प्रॉक्सी का आईपी देगा। चाहे आप उपयोगकर्ता का आईपी प्राप्त कर सकते हैं, इस पर निर्भर करता है कि प्रॉक्सी किस सूचना के साथ गुजरती है। लेकिन, यह आमतौर पर हेडर में भी होगा।


1
लेकिन क्या यह मुझे एपीआई का मेजबान नहीं देता है? यह इस तथ्य के कारण हो सकता है कि मैं स्थानीय रूप से ऐसा कर रहा हूं और मेरे पास एपीआई.टाइम है।इसके लिए 127.0.0.1 और कॉल आई एम मेकिंग को हल करने के लिए सेट किया गया है लोकलहोस्ट से, लेकिन अगर मैं इसका उपयोग करता हूं, तो होस्ट "api.time.ly" है मुझे उस डोमेन को जानना होगा जो मुझे कॉल कर रहा है। मैं एक जीवित साइट पर यह परीक्षण करेंगे।
निकोला पेलुचेती

1
@ नोइकोलापुचेती मुझे लगता है मुझे समझ में नहीं आ रहा है कि आप " डोमेन जो मुझे बुला रहे हैं " से क्या मतलब है । HTTP क्लाइंट आमतौर पर अनुरोध में अपने स्वयं के होस्टनाम की आपूर्ति नहीं करते हैं। क्या यह CORS के लिए है ?
जोनाथन लोनोस्की 22

मुझे एक केंद्रीय एपीआई मिला है जो एपीआई.टाइम पर स्थित है। यह एपीआई विभिन्न क्लाइंट वेबसाइटों द्वारा कहा जाता है जो हमारे वर्डप्रेस प्लगइन को स्थापित करते हैं। तो हम हमारे api को Church1.com और सॉना 1.com कॉल कर सकते थे। एपीआई में मैं अगर कॉल से बनाया गया था प्राप्त करने में सक्षम हो जाएगा church1.com या से sauna1.com ? मैंने देखा 'user-agent': 'WordPress/3.6; http://localhost/wordpress_clean'कि क्या मुझे एक शीर्ष लेख चाहिए?
निकोला पेलुचेती

यदि डोमेन पारित नहीं हुआ है, तो यह कोई समस्या नहीं है, मैं इसे स्पष्ट रूप से एपीआई कॉल में जोड़ सकता हूं।
निकोला पेलुचेती

@NicolaPeluchetti आप उपयोगकर्ता-एजेंट को विभाजित करने और पार्स करने की कोशिश कर सकते हैं या अनुरोध में इसे डेटा के रूप में देख सकते हैं। लेकिन, मैं कहूंगा कि OAuth जैसा कुछ ग्राहकों की पहचान करने के लिए बेहतर होगा।
जोनाथन लोनोव्स्की


8

एक्सप्रेस 4.x में आप उपयोग कर सकते हैं req.hostname, जो बिना पोर्ट के डोमेन नाम लौटाता है। अर्थात:

// Host: "example.com:3000"
req.hostname
// => "example.com"

देखें: http://expressjs.com/en/4x/api.html#req.hostname


8
यह उस सर्वर का होस्टनाम देता है जिसे आप अनुरोध प्राप्त कर रहे हैं। यह तभी काम करेगा जब आप अपनी एपीआई और वेबसाइट को एक ही सर्वर पर चला रहे हों और पार्टी को प्राप्त करना और प्राप्त करना एक ही मेजबान हो।
पॉल टी। रॉकेन

0

हाल ही में 'ओरिजिन' रिक्वेस्ट हेडर लाने में समस्या का सामना करना पड़ा, तब मुझे यह सवाल मिला। लेकिन परिणामों के साथ बहुत उलझन में, req.get('host')पदावनत है, इसलिए दे रहा है Undefined। उपयोग,

    req.header('Origin');
    req.header('Host');
    // this method can be used to access other request headers like, 'Referer', 'User-Agent' etc.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.