2015-10-30 15 views
6

मैं वातावरण चर को पढ़ने के लिए कोशिश कर रहा हूँ HTTP GET में कॉलकोणीय जे एस पर्यावरण चर पढ़ा

$http.get('http://' + $location.host() + ':8080/api') 

मैं पर्यावरणीय चर पढ़ सकते हैं और तेह ऊपर API कॉल में http बाकी सर्वर के रूप में उपयोग करने में सक्षम होना चाहता हूँ, इस प्रकार

$http.get('environmental_variable ':8080/api') 

नोट: मैं क्रम में जब तक वातावरण चर पता तो मैं मान नहीं सकता से पहले हाथ एक निरंतर

+1

* "मैं एपीआई पता पर्यावरण परिवर्तनीय होना चाहता हूं" *। इसे बेहतर समझाओ। – dfsq

उत्तर

4

ऐसा कोई चीजों के रूप में संलग्न के रूप में उपयोग करने के लिए न ब्राउज़र में विषाणु चर।

$location सेवा हमेशा आपके वर्तमान यूआरएल प्राप्त करने जा रही है। मुझे लगता है कि आपका एपीआई एक अलग मेजबान पर रह सकता है।

कोणीय स्थिरता में कॉन्फ़िगरेशन संग्रहीत करके पर्यावरण चर को अनुकरण करना संभव है।

app.constant('env', { 
    API_URL: "http://someurl.com:8080/api" 
}); 

फिर आप अपने अन्य प्रदाताओं में इस स्थिरता को इंजेक्ट कर सकते हैं।

app.controller('MyController', function($http, env) { 
    $http.get(env.API_URL); 
}); 

यहां best practices with constants पर एक सभ्य लेख है। आलेख स्थिरांक का उपयोग नहीं कर रहा है, क्योंकि कोड को पुनर्निर्माण किए बिना कॉन्फ़िगरेशन को संशोधित करने में सक्षम होना उपयोगी है।

जिस तरह से मैं इसे सामान्य रूप से संभालता हूं, वह सभी उदाहरण कॉन्फ़िगरेशन विवरण config.json फ़ाइल पर ले जाना है, फिर जब मैं अपने एप्लिकेशन को बूटस्ट्रैप करता हूं तो इसे $http से लोड करें।

उदाहरण के लिए, आपके पास इस तरह की एक कॉन्फ़िगरेशन फ़ाइल हो सकती है।

{ 
    apiUrl: "http://someurl.com:8080/api" 
} 

फिर एक कोणीय सेवा जो इसे लोड करती है।

app.service('Config', function($http) { 
    return function() { 
    return $http.get('config.json'); 
    }; 
}); 

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

app.controller('MyController', function($http, Config) { 
    Config() 
    .then(function(config) { 
     $http.get(config.apiUrl); 
    }); 
}); 
+0

कोणीय निरंतर 'process.env.ENV_VARIABLE' जैसा कुछ हो सकता है? –

+0

आप इसे इस तरह नाम दे सकते हैं, लेकिन यह आपके सिस्टम के पर्यावरण चर का उपयोग नहीं करेगा, क्योंकि आप ब्राउज़र के माध्यम से उन्हें पकड़ नहीं सकते हैं। –

+0

इसे मिला, धन्यवाद! –

0

मैं दृढ़ता से सुझाव देता हूं कि आप पर्यावरण चर सेट करने के लिए लाइब्रेरी का उपयोग करें। https://www.npmjs.com/package/angular-environment

यहाँ एक उदाहरण

angular.module('yourApp', ['environment']). 
config(function(envServiceProvider) { 
    // set the domains and variables for each environment 
    envServiceProvider.config({ 
     domains: { 
      development: ['localhost', 'acme.dev.local'], 
      production: ['acme.com', '*.acme.com', 'acme.dev.prod'], 
      test: ['test.acme.com', 'acme.dev.test', 'acme.*.com'], 
      // anotherStage: ['domain1', 'domain2'] 
     }, 
     vars: { 
      development: { 
       apiUrl: '//api.acme.dev.local/v1', 
       staticUrl: '//static.acme.dev.local', 
       // antoherCustomVar: 'lorem', 
       // antoherCustomVar: 'ipsum' 
      }, 
      test: { 
       apiUrl: '//api.acme.dev.test/v1', 
       staticUrl: '//static.acme.dev.test', 
       // antoherCustomVar: 'lorem', 
       // antoherCustomVar: 'ipsum' 
      }, 
      production: { 
       apiUrl: '//api.acme.com/v1', 
       staticUrl: '//static.acme.com', 
       // antoherCustomVar: 'lorem', 
       // antoherCustomVar: 'ipsum' 
      }, 
      // anotherStage: { 
      // customVar: 'lorem', 
      // customVar: 'ipsum' 
      // }, 
      defaults: { 
       apiUrl: '//api.default.com/v1', 
       staticUrl: '//static.default.com' 
      } 
     } 
    }); 

    // run the environment check, so the comprobation is made 
    // before controllers and services are built 
    envServiceProvider.check(); 
}); 

है तो फिर तुम क्या पर्यावरण आपके आवेदन चल रहा है के आधार पर सही चर प्राप्त कर सकते हैं:: आप कोणीय वातावरण है कि ऐसा करने के लिए प्लगइन का उपयोग कर सकते var apiUrl = envService.read('apiUrl');

चीयर्स!

+0

से बात करता है तो यह हार्ड-कोड आपके पर्यावरण चर के एक फ़ाइल में होगा जो हर कोई देख सकता है। यह उदाहरण दिखाया गया है, लेकिन इसका उपयोग उत्पादन वातावरण में नहीं किया जाना चाहिए। उपयोग की जाने वाली सेटिंग्स को आपके सीआई/सीडी सर्वर द्वारा अपडेट किया जाना चाहिए। –

2

बहुत सारे उदाहरण दिखाते हैं कि आप अपनी सेटिंग्स को विभिन्न फ़ाइलों या स्थिरांक में कैसे डाल सकते हैं। इनमें से अधिकांश काम, लेकिन बिंदु याद आती है।

आपकी कॉन्फ़िगरेशन सेटिंग्स आपके कोड का हिस्सा नहीं हैं!

'हैलो वर्ल्ड' उदाहरणों के अलावा, आपकी तैनाती सीआई/सीडी सर्वर द्वारा की जानी चाहिए और यह आपकी कॉन्फ़िगरेशन सेटिंग्स को सेट करने के लिए ज़िम्मेदार होना चाहिए। इसमें कई लाभ हैं:

1) आप अलग-अलग वातावरण में एक ही कोड को तैनात कर रहे हैं। यदि आप एक परीक्षण वातावरण में कोड तैनात करते हैं, तो आप उसी कोड को अपने उत्पादन वातावरण में तैनात करना चाहते हैं। यदि आपके सर्वर को उत्पादन विन्यास सेटिंग्स जोड़ने के लिए कोड को पुनर्निर्माण करना है, तो आप अलग-अलग कोड तैनात कर रहे हैं।

2) कोड को आपके एपीआई विवरण, एडब्ल्यूएस सेटिंग्स और अन्य गुप्त जानकारी देने के बिना साझा किया जा सकता है।

3) यह नए वातावरण को आसानी से जोड़ने की अनुमति देता है।

ऐसा करने के तरीके पर बहुत से उदाहरण हैं। एक उदाहरण www.jvandemo.com/how-to-configure-your-angularjs-application-using-environment-variables

संबंधित मुद्दे