2017-06-05 31 views
0

我有一個小的Angular2應用程序,在我參考localhost的地方正常工作。問題是,當我嘗試在生產環境中配置應用程序時(請參閱任何必須通過自己的IP地址和/或FQDN引用的外部主機)。有一個Angular2應用程序指向正確的URL

這是應用程序(和我在哪裏掙扎)的主要部分:

public appserver = environment.appserver_env; 

getvotes(): void { 
    const url = `${this.appserver}/api/getvotes`; 
    this.http.get(url) 
       .map((res: Response) => res.json()) 
       .subscribe(res => {console.log(res); this.votes = res})     
    } 

appserver_env該變量被設置在角environments內部。他們中的一些使用localhost如這和它工作得很好:

export const environment = { 
    production: false, 
    envName: 'test', 
    appserver_env: 'http://localhost:4567' 
}; 

基本上我開始我的應用程序,並在我的筆記本我的後端服務,一切都被標記爲localhost所有的罰款。

問題是當我嘗試部署到具有特定IP/FQDN的外部基礎架構(又名主機)時。我現在的角2的生產environment配置是這樣的:

export const environment = { 
    production: true, 
    envName: 'prod', 
    appserver_env: 'http://myappserver:4567' 
}; 

當我在那個可以解決myappserver到正確的IP地址的方式配置了我的客戶裏,才能工作。

問題是我可能最終無法在沒有FQDN(僅IP地址)的服務器上部署此應用程序。或者無論如何,在名稱解析不起作用的環境中。

Angular 2中有一個特定的模式/功能允許我解決這個問題嗎?請注意,使事情進一步複雜化,我將調配容器內的所有內容,以便應用程序本身甚至無法查看我指向瀏覽器的實際服務器IP地址。

想法?

+0

我當然可以啓動容器填充一個變量,它會映射什麼目標IP/FQDN是在容器啓動時運行的腳本時間動態地將'appserver_env'設置爲該值,但是我想相信有一種更簡單的方法來配置環境以在不沸騰海洋的情況下實現相同的結果? – mreferre

回答

0

原來,訣竅是在http字符串定義中使用window.location.host

這個版本的環境文件似乎工作得很好:

export const environment = { 
    production: true, 
    envName: 'prod', 
    appserver_env: 'http://' + window.location.host 
}; 
相關問題