让Angular2应用程序指向正确的URL

时间:2017-06-05 13:10:08

标签: angular

我有一个小的Angular2应用程序在我引用localhost的本地工作正常。问题是当我尝试在生产中配置应用程序时(读取:在任何必须由其自己的IP地址和/或FQDN引用的外部主机上)。

这是应用程序的主要部分(我正在努力奋斗):

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变量在Angular environments内设置。他们中的一些使用localhost这样的,它可以正常工作:

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

基本上我在我的笔记本电脑上启动我的应用程序和后端服务,所有内容都被引用为localhost,一切都很好。

问题是当我尝试部署到具有特定IP / FQDN的外部基础架构(也称为主机)时。我当前的Angular 2生产environment配置如下所示:

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

仅当我以可以将myappserver解析为正确IP地址的方式配置客户端时,此方法才有效。

问题是我可能最终不得不在没有FQDN(只有IP地址)的服务器上部署此应用程序。或者无论如何在名称解析不起作用的环境中。

Angular 2中是否有特定的模式/功能可以解决这个问题?请注意,为了进一步复杂化,我在容器内部配置所有内容,因此应用程序本身甚至无法查看我指向浏览器的实际服务器IP地址。

思想?

1 个答案:

答案 0 :(得分:1)

事实证明,诀窍是在http字符串定义中使用window.location.host

这个版本的环境文件似乎运行得很好:

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