Javascript 将环境变量从节点传递到AngularJS

Javascript 将环境变量从节点传递到AngularJS,javascript,angularjs,node.js,heroku,Javascript,Angularjs,Node.js,Heroku,我有一个Angular应用程序,它运行在节点环境中,作为服务器使用express.js 该项目必须部署在Heroku dyno上,因此在该平台上,为了配置环境,我通过Procfile设置了正确的环境,如下所示: config_env: heroku config:set NODE_ENV=staging 这样,我为所有环境设置了正确的环境 现在,我想以某种方式将process.env.NODE\u env变量传递给Angular,以便它能够读取Http请求期间必须调用的正确API链接 我已经读

我有一个Angular应用程序,它运行在节点环境中,作为服务器使用
express.js

该项目必须部署在Heroku dyno上,因此在该平台上,为了配置环境,我通过
Procfile
设置了正确的环境,如下所示:

config_env: heroku config:set NODE_ENV=staging
这样,我为所有环境设置了正确的环境

现在,我想以某种方式将
process.env.NODE\u env
变量传递给Angular,以便它能够读取Http请求期间必须调用的正确API链接

我已经读到,这似乎是唯一一个有多种解决方案的解决方案,而最后一个,正如作者所说,没有任何缺点(好吧,一个,但它是荒谬的)

对我来说(我在节点和角度方面都不太有经验),不清楚这个选项4是如何工作的,也许你们很多人现在都在使用它,所以也许有人比作者更清楚

我特别不明白的是,Angular如何理解它必须使用的环境

我解释自己:在这篇文章中,作者使用Gulp和
Gulp ng config
传递变量(我也使用Gulp,因此很容易用新任务更新它)。因此,我将以下
config.json
文件传递给该插件(类似于中的文件):

当然,我有以下常数作为结果:

angular.module("myApp")
.constant("development", {"ENV_VARS":{"apiUrl":"https://api-development.com/","debug":true}})
.constant("testing", {"ENV_VARS":{"apiUrl":"https://api-testing.com/","debug":true}})
.constant("staging", {"ENV_VARS":{"apiUrl":"https://api-staging.com/","debug":true}})
.constant("production", {"ENV_VARS":{"apiUrl":"https://api-production.com/","debug":false}});
现在问题仍然存在,因为Angular不知道哪个是正确的环境,然后是它必须通过应用程序使用的正确常量。。。那么,优势是什么


是否有其他方法可以在Angular应用程序中传递
process.env.NODE_env
,以便在有http请求时使用
$http.get({url:env\u VARS.apirl+'api/sessions'})
。客户端(AngularJS)应用程序应该自己知道哪个API端点是正确的。只需构建(分发)AngularJS应用程序,并直接在AngularJS应用程序内解析/替换配置,例如for(dev、test、stage和prod)。我无法传递不同的配置文件,因为Heroku没有此功能。我只能在Heroku构建时配置它,它必须使用特定的环境。这可以通过
Procfile
或通过该文件
script节点中的
package.json
完成(通过我在问题开头编写的命令行)。由于这个原因,Angular不知道正确的环境。这不取决于您的环境(在您的例子中是Heroku)。这取决于您的应用程序。AngularJS能够处理配置,那么为什么不分发应用程序并使用所需的配置构建它呢?例如,咕噜咕噜地喝还是大口地喝?检查这篇简单的文章。在您的情况下,
env.js
将在使用所需的配置文件构建分发包时被替换。就这些。你可以用grunt轻松地处理这个问题。我也读过这篇文章,问题总是一样的:要遵循它,你必须上传一个特定于包含特定API链接的环境(登台、生产等)的配置文件(你刚才说的
env.js
)。现在,对于Heroku来说,这是不可能的。顺便说一句,我已经在通过Gulp构建和编译应用程序,这就是为什么我最初遵循我在问题中提到的文章中的选项4(他建议使用Gulp插件作为最佳解决方案)。无论如何,也许这对我来说不太清楚,所以你能更准确地解释一下吗?另外,在你链接的文章的评论中,@lin,一个家伙也有同样的问题,他最终使用了
gulp ng constant
,这与我在问题中提到的文章中提出的解决方案完全相同。。。
angular.module("myApp")
.constant("development", {"ENV_VARS":{"apiUrl":"https://api-development.com/","debug":true}})
.constant("testing", {"ENV_VARS":{"apiUrl":"https://api-testing.com/","debug":true}})
.constant("staging", {"ENV_VARS":{"apiUrl":"https://api-staging.com/","debug":true}})
.constant("production", {"ENV_VARS":{"apiUrl":"https://api-production.com/","debug":false}});