【问题标题】:How to set an environment variable in config.js of a node.js microservice?如何在 node.js 微服务的 config.js 中设置环境变量?
【发布时间】:2019-02-28 01:00:20
【问题描述】:

我有一个使用 graphql 构建的 node.js 应用程序。我需要检查“环境变量”以查看我所处的环境(开发、测试、生产)。基于那个环境,我需要设置一个 url。我想我对我需要什么有一个模糊的想法,但不知道如何完成它。

目前我的 config.js 文件如下所示:

       const configuration = convict({
          env: {
              format: ['development', 'testing', 'production'],
              default: 'development',
              arg: 'nodeEnv',
              env: 'NODE_ENV'
         }

         const env = configuration.get('env');
         configuration.loadFile(`./config/${env}.json`);
         configuration.validate({allowed: 'strict'});

         module.exports = configuration.getProperties();
     )};

然后在一个单独的文件中,我实际上需要根据环境设置 url,我需要根据我所处的环境类型(开发、测试或生产)来设置。该文件中的代码是:

        If(env=='development'){
           const url = 'abc.def.com/xxx/yyy/zzz/graphql';
        }
        Else If (env == 'testing'){
           const url = 'xxx.yyyy.com/abc/def/ghi/graphql';
        }
        Else{
           const url = '123.abc.com/cdc/def/hhh/graphql';
        }

我尝试 console.log 环境值,但是当我尝试以下操作时: 控制台日志(环境);

我收到一个错误:引用错误:未定义环境。

有人可以指出我在访问 env 变量时缺少什么/做错了吗?

【问题讨论】:

  • 可以使用process.env.NODE_ENV获取当前节点环境。
  • @RogerDodger 可以在代码中设置 process.env.NODE_ENV = 'production';或使用它开始您的流程 NODE_ENV=production node app.js
  • 将配置导出为 module.exports = configuration 并在另一个文件中需要它,如 const config = require('./config.js') 并在该文件中执行 config.get( 'env')。
  • 请确认您正在将配置导出为 module.exports = configuration;
  • 或者如果你想导出为 module.exports = configuration.getProperties();,然后控制台记录整个导出,看看你得到了什么。 console.log(JSON.stringify(config));

标签: javascript node.js


【解决方案1】:

您可以像这样访问它们:

process.env.VARIABLE_NAME

【讨论】:

  • mexo - 我在命令行中启动了我的应用程序,如下所示: npm start --development ;然后在我的文件中,我尝试将控制台日志记录为 console.log(process.env.NODE_ENV) 但我一直在控制台中未定义
  • 是的,这行得通:NODE_ENV=development npm start - 谢谢 Neeraj!我如何接受你的回答?我在您的答案旁边没有看到复选标记。
  • 目前 - 如果我使用 NODE_ENV=development npm start 在命令行手动启动 node.js 程序,此解决方案有效。但是当我将我的应用程序部署到测试和生产中时,这是一个自动化的过程——所以我需要一种通过代码来完成的方法——我尝试将它添加到 "scripts":"NODE_ENV=dev" 中,但这不起作用。关于如何做到这一点的任何想法?
  • @NeerajWadhwa - 当我通过在命令行中手动输入变量来手动设置变量时,您的解决方案有效,但我需要能够在运行时根据部署后的环境动态设置这些变量到云端。我该怎么做呢?
  • 您可以尝试将配置导出为 module.exports = configuration;在其他模块中要求它之后,只需执行 config.get('env').
猜你喜欢
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多