解析环境变量的正确方法
Proper way to parse environment variables
我基本上在我所有的项目中都使用 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 格式。这将允许做这样的事情......
custom-environment-variables.js
module.exports = {
myNumber = {
name: "MY_NUMBER",
type: "number"
},
myBool = {
name: "MY_BOOL",
type: "boolean"
}
}
node-config
会处理类型转换,并且在获取它时不需要在代码中一直这样做。当然,需要为布尔值实现一个合适的解析器,但那些已经存在并且可以在这里使用。
默认情况下,环境变量将被解析为字符串。
在节点配置中,我们可以使用 __format
覆盖此行为,如下所示。
我们不需要任何额外的库。正常的 json 数据类型,如布尔值、数字、嵌套 json 等,应该可以正常工作。
举一个简单易懂的例子。
config/default.json
{
"service": {
"autostart": false
}
}
自定义环境-variables.json
{
"service": {
"autostart": {
"__name": "AUTOSTART",
"__format": "json"
}
}
}
现在我们可以在需要覆盖时传递环境变量,基本类型不需要类型对话。
node-config v3.3.2, see changelog
现在支持此功能
我基本上在我所有的项目中都使用 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 格式。这将允许做这样的事情......
custom-environment-variables.js
module.exports = {
myNumber = {
name: "MY_NUMBER",
type: "number"
},
myBool = {
name: "MY_BOOL",
type: "boolean"
}
}
node-config
会处理类型转换,并且在获取它时不需要在代码中一直这样做。当然,需要为布尔值实现一个合适的解析器,但那些已经存在并且可以在这里使用。
默认情况下,环境变量将被解析为字符串。
在节点配置中,我们可以使用 __format
覆盖此行为,如下所示。
我们不需要任何额外的库。正常的 json 数据类型,如布尔值、数字、嵌套 json 等,应该可以正常工作。
举一个简单易懂的例子。
config/default.json
{
"service": {
"autostart": false
}
}
自定义环境-variables.json
{
"service": {
"autostart": {
"__name": "AUTOSTART",
"__format": "json"
}
}
}
现在我们可以在需要覆盖时传递环境变量,基本类型不需要类型对话。
node-config v3.3.2, see changelog
现在支持此功能