我有一个小的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地址。
思想?
答案 0 :(得分:1)
事实证明,诀窍是在http字符串定义中使用window.location.host
。
这个版本的环境文件似乎运行得很好:
export const environment = {
production: true,
envName: 'prod',
appserver_env: 'http://' + window.location.host
};