将NODE_ENV传递给Angular

时间:2014-01-13 05:51:58

标签: javascript node.js angularjs pug

我有一个基于节点的Angular应用程序。它使用Jade进行模板化。我想隐藏或显示我的页面块,具体取决于我用来启动节点的NODE_ENV变量。

这样的事情(不确定如何用ng-if检查“否则”):

div(ng-if="testingmode")
    {{somescopevar}}

div(ng-if != "testingmode")
    {{differentscopevar}}

踢球者是测试模式由NODE_ENV变量决定。我可以在我的jade模板中访问该变量,但不知道如何将它放入我的Angular范围。

tl;博士:如何将NODE_ENV纳入我的Angular范围?

2 个答案:

答案 0 :(得分:4)

就个人而言,我会创建一个返回该值的api调用,然后使用$ http在控制器中抓取它。

在您的节点路线中:

app.get('/nodeenv', function(req, res, next){
    return res.json({ env: app.get('env') });
});

在角度控制器中:

$http.get('/nodeenv').success(function(data){
    $scope.myEnvironment = data.env;
});

更新:

我用新项目执行此操作的新方法是将我的根索引文件生成为节点中的模板(例如,使用doT模板)。然后将任何常量传递到模板中,直接加载到角度。以下是您可以在环境中传递的方式,例如:

index.def

<html>
<head><!-- head stuff --></head>
<body>
    <div>scripts and content go here</div>

    <!-- initialise any templated constants -->
    <script>
        angular.module('mymodule').constant('globals', {
            env: '{{=it.env}}'
        });
    </script>
</body>
</html>

答案 1 :(得分:1)

作为替代方案,您可以使用gulp-replace将其放入构建系统中。我确信grunt有类似的功能。

的index.html

<script>
  var ENV = 'NODE_ENV'; // replaced by gulp
</script>

gulpfile.js

gulp.task('setEnv', function(){
  gulp.src(['index.html'])
  .pipe(replace(/NODE_ENV/g, process.env.NODE_ENV))
  .pipe(gulp.dest('build/index.html'));
});

Haven没有测试确切的代码,但是你得到了要点。

相关问题