将环境变量从Node传递给AngularJS

时间:2017-06-01 16:55:16

标签: javascript angularjs node.js heroku

我有一个在Node环境中运行的Angular应用程序,而且服务器正在使用express.js

这个项目必须部署在Heroku dyno上,所以在那个平台上,为了配置环境,我通过这样的Procfile设置了正确的项目:

config_env: heroku config:set NODE_ENV=staging

这样做,我为所有环境设置了正确的环境。

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

我已经阅读了this article,它似乎是唯一一个拥有多个解决方案的最终解决方案,正如作者所说,它没有任何缺点(好吧,一个,但这很荒谬)。

对我来说(我在Angular中对Node不太熟悉)不清楚这个选项4是如何工作的,也许很多人现在正在使用它,所以也许有人可能比作者更清楚。

我特别不了解的是Angular如何理解它必须使用的环境。

我自己解释一下:在文章中,作者正在使用带有gulp-ng-config的Gulp传递变量(我也使用Gulp,因此使用新任务更新它很容易)。所以,我将以下config.json文件传递给此插件(类似于his example中的那个):

{
    "development": {
        "ENV_VARS": {
            "apiUrl": "https://api-development.com/",
            "debug": true
        }
    },
    "testing": {
        "ENV_VARS": {
            "apiUrl": "https://api-testing.com/",
            "debug": true
        }
    },
    "staging": {
        "ENV_VARS": {
            "apiUrl": "https://api-staging.com/",
            "debug": true
        }
    },
    "production": {
        "ENV_VARS": {
            "apiUrl": "https://api-production.com/",
            "debug": false
        }
    }
}

当然,我有以下常数:

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_VARS.apiUrl + 'api/sessions'})之类的内容?

0 个答案:

没有答案