node.js为什么以及如何将分配给process.env的对象转换为字符串?

时间:2018-01-04 17:29:53

标签: node.js

因此,在处理我的应用程序时,我尝试通过在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是一个在启动时传递给我的应用程序的对象,这个转换是如何实现的?

2 个答案:

答案 0 :(得分:0)

来自8.9.4 API docs

  

在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)