November 24, 2023

Варианты конфигураций запуска приложения

Рассмотрим запуск приложения в различных режимах.

Первый вариант.

Например, вы запускаете скрипт локально, для отладки и настройки с соответствующим флагом "debug"

node app.js -c debug

В этом режиме выбирается хост и включение или выключение логирования событий. Это могут быть любые настройки работы скрипта: выбор порта, имя базы данных и т.д. и т.п. В любом случае, режим отладки скорее всего выводит много информации, которая не должна обрабатываться и выводиться на экран в нормальном рабочем режиме.

Второй вариант

"Боевой" режим, когда вы запускаете скрипт или сервер в его штатном режиме для выполнения своих функций.

node app.js

Можно указать с флагом или без. Без флага берется дефолтный файл конфигурации production.json.

Другие варианты

Вы можете настроить множество вариантов загрузки настроек вашего приложения, соответствующие вашим потребностям. достаточно лишь добавить файл JSON

Приложение

Этот скрипт сначала читает файл route_config.json, определяет режим работы, выбирает соответствующий режиму файл конфигурации, читает его содержимое и выводит значение переменной logger из этого файла. В случае возникновения ошибок при чтении или парсинге JSON, скрипт обрабатывает их и выводит соответствующие сообщения об ошибках.

//app.js
const fs = require('fs'); // Подключение модуля fs для работы с файловой системой

try {
  // Чтение файла route_config.json
  const data = fs.readFileSync('route_config.json', 'utf8'); // Чтение содержимого файла route_config.json в кодировке UTF-8
  const config = JSON.parse(data); // Преобразование содержимого файла в объект JavaScript
  const mode = process.argv[2] === '-c' ? process.argv[3] : 'production'; // Определение режима работы (debug или production) из аргументов командной строки
  const configFile = config[mode]; // Получение имени файла конфигурации в зависимости от выбранного режима

  // Чтение файла конфигурации (debug.json или production.json)
  const configData = fs.readFileSync(configFile, 'utf8'); // Чтение содержимого файла конфигурации
  let parsedConfigData;
  try {
    parsedConfigData = JSON.parse(configData); // Попытка преобразования содержимого файла конфигурации в объект JavaScript
    console.log(`Переменная logger: ${parsedConfigData.logger}`); // Вывод значения переменной logger из файла конфигурации
  } catch (err) {
    console.error(`Произошла ошибка при парсинге JSON в файле ${configFile}:`, err); // Обработка ошибки при парсинге JSON
  }
} catch (err) {
  console.error(`Произошла ошибка при чтении JSON файла:`, err); // Обработка ошибки при чтении файла
}

Пример маршрутизатора конфигураций route_config.json:

{
  "production": "production.json",
   "config": "config.json",
  "debug": "debug.json"
}

Вариант конфигурации для локальной отладки приложения debug.json:

{
  "logger": true,
  "host": "localhost"
}

Вариант конфигурации готового продукта production.json:

{
  "logger": false,
  "host": "example.com"
}

Пример работы:

D:\node\mode>node app.js -c debug
Переменная logger: true

D:\node\mode>node app.js -c config
Переменная logger: false

D:\node\mode>node app.js
Переменная logger: false

Далее реализуем вывод логов, если есть соответствующее разрешение в настройках скрипта.