解析环境变量的正确方法

时间:2020-01-05 11:16:40

标签: node.js node-config

我基本上在所有项目中都使用node-config,并且大多数时候我遇到解析设置为环境变量的布尔值和数字的问题。

例如

default.js

module.exports = { 
    myNumber = 10,
    myBool = true
}

custom-environment-variables.js

module.exports = { 
    myNumber = "MY_NUMBER",
    myBool = "MY_BOOL"
}

现在,一个明显的问题是,如果我使用设置为环境变量的自定义值覆盖默认值,则它们将是字符串值,而不是数字或布尔值。所以现在,要确保我的代码中类型正确。我总是必须进行类型转换,对于布尔值请使用适当的库,例如yn。问题是我每次使用config.get()+config.get("myNumber")例如yn(config.get("myBool"))时都要进行这种转换。

有没有更好,更优雅的方法来做到这一点?

我看到的一个解决方案是在here使用格式完成的过程中,将type属性添加到环境变量中。这将允许做这样的事情...

custom-environment-variables.js

module.exports = { 
    myNumber = {
        name: "MY_NUMBER",
        type: "number"
    },
    myBool = {
        name: "MY_BOOL",
        type: "boolean"
    }
}

node-config将处理类型转换,并且在获取代码时不需要一直在代码中进行转换。当然,需要为布尔实现正确的解析器,但是布尔已经存在并且可以在此处使用。

2 个答案:

答案 0 :(得分:2)

默认情况下,环境变量将被解析为字符串。 在node-config中,我们可以使用__format覆盖此行为,如下所示。

我们不需要任何其他库。普通的json数据类型(例如boolean,number,嵌套的json等)应该可以正常工作。

举一个简单的例子。

config / default.json

{
  "service": {
    "autostart": false
  }
}

custom-environment-variables.json

{
  "service": {
    "autostart": {
      "__name": "AUTOSTART",
      "__format": "json"
    }
  }
}

现在,当我们希望覆盖并且基本类型不需要类型对话时,就可以传递环境变量了。

答案 1 :(得分:0)

node-config v3.3.2现在支持此功能,请参见changelog