因此,在处理我的应用程序时,我尝试通过在config
中创建属性process.env
将我的配置指定为环境变量。
但是,在使用它时,我发现node.js
在分配给process.env
时将对象转换为字符串。
以下是演示此内容的示例代码:
const config = {
port: 3000,
url: 'url'
}
process.env.config = config;
console.log(process.env.config) // prints '[object Object]'
console.log(typeof process.env.config) // prints 'string'
这是否有任何具体原因?
另外,假设process.env
是一个在启动时传递给我的应用程序的对象,这个转换是如何实现的?
答案 0 :(得分:0)
在process.env上分配属性会隐式地将值转换为字符串。
const config = { x : 1 };
const otherconfig = 1;
console.log(typeof config); // object
console.log(typeof otherconfig); // number
process.env.config = config;
console.log(process.env.config); // [object Object]
console.log(typeof process.env.config); // string
process.env.otherconfig = otherconfig;
console.log(process.env.otherconfig); // 1
console.log(typeof process.env.otherconfig); // string
为什么会被转换为字符串?
process.env属性返回包含用户环境的对象。见environ(7)。
并且关注环境。
变量environ指向一个指向字符串的指针数组 "环境"。
所以是它的低级别来回来回,因为process
是一个全局变量,它总是存储为字符串。
只是尽量避免以这种方式定义环境变量,在已经定义变量时更容易调试,并且使用dotenv来更容易定义不同的配置。
答案 1 :(得分:-1)
process.env
中的值通常来自执行环境。因此,在UNIX shell中,您可以发出MY_TEST_VALUE=abc123 node index.js
之类的命令,在index.js
中,您将可以访问值process.env.MY_TEST_VALUE
。因此,process.env
中的所有内容都存储为字符串。
话虽如此,您始终可以在process.env
中存储字符串化的JSON值:
process.env.CONFIG = JSON.stringify(config)
// and parse it when consuming
parsedConfig = JSON.parse(process.env.CONFIG)