NodeJS - config无法加载自定义环境变量

时间:2018-05-31 07:26:02

标签: node.js node-config

我正在运行config@1.30.0并且我试图使用.\config\custom-environment-variables.json从环境变量中获取设置不起作用。但是,它从.\config\default.json读取就好了。

.\config\custom-environment-variables.json

{
  "key": "app_key"
}

.\config\default.json

{
  "key": "defaultKey"
}

运行

const config = require('config');
console.log(config.get('key'))

始终打印

defaultKey

但是当我将config / default中的key属性设置为空字符串时,不打印任何内容。我该如何解决这个问题?

我尝试了什么

  1. 随时使用set app_key = newKey
  2. 设置环境变量时打开一个新控制台
  3. 手动设置环境

6 个答案:

答案 0 :(得分:7)

配置文件名与启动节点时使用的NODE_ENV环境变量有关。

该模块的目的是为您要部署到测试,登台,生产环境的每种类型的环境配置一个配置文件。如果未设置任何内容或无法找到文件,则默认接管

e.g。用于测试和登台环境。

config/default.json

{
  "key": "default_key"
}

config/test.json

{
  "key": "test_key"
}

config/production.json

{
  "key": "prod_key"
}

app.js

var config = require('config')
console.log(config.key)

然后,如果您使用与config目录中的文件不同的NODE_ENV 名称运行,则会获得不同的密钥

node app.js // output default_key
NODE_ENV=test node app.js // output test_key
NODE_ENV=production node app.js // output prod_key

您使用文件config/custom-environment-variables.json询问引用自定义环境变量此文件将允许您在运行节点时使用设置的环境变量覆盖其中一个文件中的值。当您无法提交变量(例如数据库密钥但可能希望在同一位置访问所有配置)时,此功能非常有用。

e.g。

{
  "key": "SECURE_DATABASE_KEY"
}

然后使用新的配置文件再次运行相同的程序:

NODE_ENV=production node app.js // output prod_key
SECURE_DATABASE_KEY=asldfj40 NODE_ENV=production node app.js // output asldfj40

答案 1 :(得分:4)

我遇到了类似的问题,发现如果我打开一个新的终端窗口,我在运行export some_secret=immasecret的同一个窗口重新启动服务器,那么应​​用程序不会崩溃,可以访问some_secret变量。我以前一直试图在另一个窗口中运行节点时访问该变量。

答案 2 :(得分:1)

此问题与VSCODE编辑器集成终端有关

We have also struggled a lot with this issue initially, but the issue is that you might be using the **integrated terminal** that comes with *VSCODE* there is an issue with that, please try to use some external terminals like *cmder* or cmd prompt that comes with windows you will get the output as you are expecting.

使用外部终端或CMD提示执行代码

答案 3 :(得分:0)

您的文件和代码正确,而您的cmd命令错误

使用此命令

  

setx app_key NewKey

答案 4 :(得分:0)

一个可行的解决方案可能是使用custom-env nodejs模块,该模块允许您使用流行的.env方法为不同阶段添加不同的环境变量。 .env环境的示例dev.env.staging环境的示例staging

答案 5 :(得分:0)

注意!

如果 config/production.json

{
  "key": "prod_key"
}

和 config/local.json

{
  "key": "local_key"
}

NODE_ENV=production node app.js

输出为:local_key

如果 local.json 存在则 NODE_ENV=production 被忽略

详情config Wiki(很精致,可惜例子太少)