Правильный способ анализа переменных среды

Я использую node-config практически во всех своих проектах, и в большинстве случаев я сталкиваюсь с проблема синтаксического анализа логических и числовых значений, заданных как переменные среды.

E.g.

default.js

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

пользовательские-переменные-среды.js

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

Теперь очевидная проблема заключается в том, что если я заменяю значения по умолчанию пользовательскими значениями, установленными в качестве переменных среды, они будут строковым значением, а не числом или логическим значением. Итак, теперь, чтобы убедиться в моем коде, что типы верны. Мне всегда нужно преобразовывать типы, а для логических значений использовать правильную библиотеку, например. yn. Проблема в том, что мне приходится выполнять это преобразование каждый раз, когда я использую config.get(), например +config.get("myNumber") или yn(config.get("myBool")).

Есть ли лучший и более элегантный способ сделать это?

Одно из решений, которое я вижу, - это добавить свойство типа к переменной среды, как это делается здесь с форматом. Это позволило бы сделать что-то вроде этого ...

пользовательские-переменные-среды.js

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

node-config будет обрабатывать преобразование типов, и нет необходимости делать это все время в коде при его получении. Конечно, потребуется реализовать соответствующий синтаксический анализатор для логических значений, но они уже существуют и могут быть использованы здесь.


person nflaig    schedule 05.01.2020    source источник


Ответы (2)


По умолчанию переменные среды анализируются как строка. В node-config мы могли бы переопределить это поведение с помощью __format, как показано ниже.

Никаких дополнительных библиотек нам не нужно. Нормальные типы данных json, такие как логическое значение, число, вложенный json и т. Д., Должны работать нормально.

Взять простой пример.

config / default.json

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

пользовательские-переменные-среды.json

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

Теперь мы можем передавать переменные среды, когда мы хотим переопределить, и для базовых типов не требуется никакого разговора о типах.

person Sairam Krish    schedule 09.06.2020
comment
есть открытый PR на GitHub, связанный с проблемой, чтобы сделать __format немного более конкретный в случае чисел и логических значений, но в целом ваш ответ также будет работать - person nflaig; 23.06.2020

Эта функция теперь поддерживается в node-config v3.3.2, см. журнал изменений

person nflaig    schedule 27.09.2020