2013-12-12 13 views
19

मैं अभी भी नोड जेएस और जावास्क्रिप्ट सीख रहा हूं और एक ऐप है।नोड जेएस रिटर्न होस्टनाम

window.location.hostname 

लेकिन वह काम नहीं किया: जहाँ मैं Ubuntu 12.04

पर सर्वर का होस्टनाम हड़पने के लिए की जरूरत है मैं की तरह कुछ करने की कोशिश की मैं एक विन्यास फाइल की है। नीचे नमूना कोड:

exports.config = { 
    app_name : [ window.location.hostname ] 
} 

अगर मैं एक स्ट्रिंग का उपयोग, यह ठीक से लोड होगा, लेकिन इस Github के माध्यम से प्रबंधित किया जा रहा है और जरूरत है विभेदित किया जा करने के लिए जब एप्लिकेशन लोड होता है।

+2

@Quentin नहीं, यह एक, HTTP अनुरोध हेडर में मेजबान के बारे में है कम से कम है कि इसका जवाब स्वीकार किया गया था - सच है, शीर्षक भ्रामक है। –

+1

http://davidcaylor.com/2012/05/24/finding-the-hostname-in-node-js/ –

उत्तर

39

to the node.js documentation for the "os" module अनुसार आप "ओएस" मॉड्यूल, एक hostname() समारोह है जो लोड करने के लिए की जरूरत है:

var os = require("os"); 
var hostname = os.hostname(); 

हालांकि, कि केवल होस्ट नाम है - डोमेन नाम (FQDN) के बिना। एफक्यूडीएन प्राप्त करने का कोई आसान तरीका नहीं है। सर्वर के आईपी पते को चालू करने का प्रयास करने के लिए आप the node.js DNS functions का उपयोग कर सकते हैं (जिसे आप os.networkInterfaces() के साथ प्राप्त करते हैं, उपरोक्त दस्तावेज़ लिंक देखें) नाम में। एकमात्र समस्या यह है कि सर्वर में अलग-अलग इंटरफेस और नाम हो सकते हैं, इसलिए आपको यह तय करना होगा कि आप किसके बारे में चाहते हैं।

आपने window ऑब्जेक्ट का उपयोग करने का प्रयास किया, लेकिन यह केवल ब्राउज़र के जावास्क्रिप्ट रनटाइम वातावरण में मौजूद है। सर्वर साइड जावास्क्रिप्ट में विंडोज़ नहीं हैं, जाहिर है, इसलिए window ऑब्जेक्ट नहीं है। See this question: "Does node.js have equivalent to window object in browser"

इस जानकारी के साथ आपका प्रश्न थोड़ा अजीब है - ब्राउज़र में window.location.hostname वर्तमान पृष्ठ से यूआरएल का होस्ट हिस्सा है। आप सर्वर संदर्भ में इसका अनुवाद कैसे करते हैं? कोड जो आप node.js पर चलाते हैं, उस सर्वर से परिभाषा के अनुसार है, इसलिए आपको वास्तव में इस जानकारी की आवश्यकता नहीं है। आपको ब्राउज़र में इसकी आवश्यकता हो सकती है क्योंकि वह जानकारी परिवर्तनीय है, खासकर जब आप मैशप (विभिन्न स्रोतों से जेएस कोड) चलाते हैं तो आपका कोड यह नहीं जान सकता कि यह पृष्ठ कहां से चलाया गया था। सर्वर पर आप हमेशा जानते हैं कि यह आपकी स्थानीय फाइल सिस्टम है।

वैसे, आप हमेशा होस्ट नाम :) के रूप में उपयोग कर सकते हैं localhost

+0

मुझे स्पष्टीकरण देना चाहिए। मुझे इस नाम को रिमोट स्रोत पर डेटा भेजने के लिए चाहिए और इसे किस सर्वर से आ रहा है उसे अलग करने की आवश्यकता है। यदि आप लिनक्स में 'होस्टनाम' कमांड चलाते हैं, तो यह सर्वर का नाम वापस कर देगा। मैं चाहता हूं कि यह नाम मेरी कॉन्फ़िगरेशन में पास हो जाए ताकि जब यह डेटा भेजता है, तो मैं इसे चलाने वाले सर्वरों के समूहों द्वारा व्यवस्थित कर सकता हूं। – nocode

+1

@nocode आपने कुछ भी स्पष्ट नहीं किया है, क्योंकि यदि आप ऊपर वर्णित 'os.hostname()' का उपयोग करते हैं तो आपको होस्टनाम मिलता है, जैसा कमांड लाइन कमांड 'होस्टनाम' के साथ होता है। यदि आपको किसी HTTP कनेक्शन में रिमोट होस्ट की आवश्यकता है तो आपके प्रश्न को "डुप्लिकेट" चिह्नित किया गया है और आपके सभी "होस्टनाम" सामान पूरी तरह से गलत हैं! असल में, आप TEH समान सैंटेंस (!!!) में जो कहते हैं वह है कि आपको स्थानीय होस्टनाम की आवश्यकता है, रिमोट होस्टनाम नहीं। अपना मन बनाओ :) –

+0

आप समझ में नहीं आ रहे हैं। ऐप स्थानीय होस्टनाम और अन्य सर्वर आंकड़ों को रिमोट स्रोत पर डेटा के रूप में भेज रहा है। मान लें कि मेरे पर्यावरण में 10 सर्वर हैं। ये 10 सर्वर रिमोट स्रोत पर डेटा भेज रहे हैं और मुझे 10 सर्वरों के होस्टनाम को परिभाषित करने का एक तरीका चाहिए ताकि मैं उन्हें अलग कर सकूं। मैं इसे मैन्युअल रूप से लिख सकता हूं, लेकिन इसे स्वचालित होने की आवश्यकता है। ब्राउज़र से डेटा प्राप्त करने के साथ इसका कोई लेना-देना नहीं है। – nocode

1

आप उपयोग कर सकते हैं

console.log(process.env.host); 
0

आप process.env जो कुछ उपयोगी क्षेत्रों रिटर्न का उपयोग कर सकते हैं:

  • UserDomain
  • उपयोगकर्ता नाम
  • सिस्ट emDrive
  • ENV
  • APPDATA
  • NODE_PATH
  • ओएस

और भी बहुत बहुत कुछ।

फिर, उदाहरण के लिए, आप का उपयोग कर सकते हैं:

console.log(process.env.OS); 

कौन वापस आ जाएगी:

Windows_NT