【发布时间】:2016-03-11 06:50:43
【问题描述】:
我有一个与 NodeJS 后端对话的 AngularJS 应用程序。我最近刚刚在前端的 API 地址中进行了硬编码,因为只有一个环境(即我的开发环境与我的生产环境相同)。
但是,随着项目的扩展,我现在拥有三个环境:开发、登台和生产。
我的开发和暂存环境使用相同的 API(比如 dev.fooapi.com),但我的生产环境应该使用不同的 API(比如 prod.fooapi.com)。
我的问题是:在我的应用程序中,有哪些“优雅”(我把它放在引号中,因为谁来说明什么是优雅的,什么不是)?我目前在我的源文件中有一个字符串占位符,看起来像“API_PLACEHOLDER”和一个 Grunt 任务,它在我的代码库中与该字符串匹配的任何地方执行字符串替换。显然这并不理想,因为这些占位符被替换的文件是源代码控制的,我真的不想做一个字符串替换然后意外地提交一些具有硬编码开发人员 API 地址的代码,因为这会在生产中中断。
额外信息:我确实在我的应用程序中使用了 Grunt,我部署到 Windows(很遗憾,无法更改),我使用 Git 进行源代码控制,我使用 Bamboo 进行构建/部署。
非常乐意回答有关我的问题的任何其他问题。
注意:我不仅需要为前端替换配置值,还需要为后端替换配置值(即,当我启动节点服务器时,我希望它启动的端口是可配置的。
谢谢!
【问题讨论】:
-
后端的环境变量可以告诉后端在每个页面中放入什么 Javascript 变量,以便前端可以使用该 JS 变量来知道要使用的 api DNS 名称。或者您可以编写前端代码以检查此类变量,如果未找到,它将使用生产环境。如果找到,它将使用那里的任何东西。
-
@jfriend00 - 前端怎么知道后端的环境变量是什么?对我来说,这听起来像是先有鸡还是先有蛋的问题。
-
如果你再读一遍,我说后端会在每个页面中放置一个 JS 变量来指示使用什么。因为JS变量在页面中,所以前端JS可以使用。
-
后端如何将 Javascript 放入每个页面?这是一个 Angular 应用程序。
-
我自己并不了解 Angular,但是您是否有能力在服务器上的页面被发送到客户端以注入脚本标签或修改变量的值之前对其进行修改?它是后端的 nodejs,因此任何模板渲染引擎都可以做到这一点。