javascript - 如何将环境变量转换为 JS 中的对象?

标签 javascript node.js env

我正在尝试将环境变量转换为值对象以在 JavaScript 中进行配置,但我不知道实现此目的的最佳方法。

想法是将 SAMPLE_ENV_VAR=value 输出为:

{
    sample: {
        env: {
            var: value
        }
    }
}

我目前拥有的:

const _ = require('lodash');
const process = require('process');

_.each(process.env, (value, key) => {
    key = key.toLowerCase().split('_');
    // Convert to object here
}

最佳答案

这是一个基于您的更完整的解决方案:

const _ = require('lodash');
const result = {};

// We'll take the following as an example:
// process.env = { HELLO_WORLD_HI: 5 }
// We'll expect the following output:
// result = { hello: { world: { hi: 5 } } }
_.each(process.env, (value, key) => {
    // We'll separate each key every underscore.
    // In simple terms, this will turn:
    // "HELLLO_WORLD_HI" -> ['HELLO', 'WORLD', 'HI']
    const keys = key.toLowerCase().split('_');

    // We'll start on the top-level object
    let current = result;

    // We'll assign here the current "key" we're iterating on
    // It will have the values:
    // 'hello' (1st loop), 'world' (2nd), and 'hi' (last)
    let currentKey;

    // We'll iterate on every key. Moreover, we'll
    // remove every key (starting from the first one: 'HELLO')
    // and assign the removed key as our "currentKey".
    // currentKey = 'hello', keys = ['world', 'hi']
    // currentKey = 'world', keys = ['hi'], and so on..
    while ( (currentKey = keys.shift()) ) {
        // If we still have any keys to nest,
        if ( keys.length ) {
          // We'll assign that object property with an object value
          // result =// { HELLO: {} }
          current[currentKey] = {};

          // And then move inside that object so
          // could nest for the next loop
          // 1st loop: { HELLO: { /*We're here*/ } }
          // 2nd loop: { HELLO: { WORLD: { /*We're here*/ } } }
          // 3rd loop: { HELLO: { WORLD: { HI : { /*We're here*/ } } } }
          current = current[currentKey];
        } else {
          // Lastly, when we no longer have any key to nest
          // e.g., we're past the third loop in our example
          current[currentKey] = process.env[key]
        }
    }
});

console.log(result);

简单来说:

  • 我们将遍历每个环境变量(来自 process.env)
  • 用下划线分隔键名,然后再次循环每个键 (['HELLO', 'WORLD', 'HI'])
  • 将其分配给一个对象 ({ hello: {} } -> { hello: { world: {} } } -> { hello: world : { hi: ? } } )
  • 当我们不再剩下任何键时,将其分配给实际值 ({ hello: { world: { hi: 5 } } } )

关于javascript - 如何将环境变量转换为 JS 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213935/

相关文章:

javascript - 单击时 addEventListener 不起作用

javascript - Node js检查文件是否被另一个进程使用

javascript - Node.JS + Express + Socket.IO - websocket 连接无效信息

ruby - Capistrano 从部署服务器上的 .env 中读取

javascript - JavaScript 对象中的范围问题

javascript - Canvas - 使用 php 或 js 保存到图像

node.js - 在 Node 中使用 Mocha 对 AWS S3 功能进行单元测试

javascript - JSON Stringify 忽略 Redis 发布上的嵌套对象

hadoop - 在Mac OS X 64位上hadoop-2.2.0竞争失败

perl - 使用 -T 开关运行时 $ENV{ENV} 不安全