Найти в Дзене
Chris Roylance

Разработка CMS на NodeJS. Часть 6. Переменные среды.

В данной статье мы добавим работу с переменными среды нашему приложение. Но для начала рассмотрим, что такое переменные среды и для чего они нужны. Переменные среды - это тип системное хранилище типа <ключе>=<значения>, которое используется для конфигурирования приложений и системных процессов. Данное хранилище защищено в пределах исполняемой среды (учётной записи и консоли), что позволяет в полной безопасности хранить например учетные данные для подключения к базе данных, хранить токены для подключений и любую другую критически важную информацию.

Для доступа к переменным среды nodejs предоставляет универсальному свойству process.env. Данное свойство может вызываться в любом месте nodejs приложения. Также переменные окружения для переносимости могут храниться в пределах файла .env, далее мы разберем данный файл, а также как с ним работать и его защитить, в этом нам поможет пакет dotenv (https://www.npmjs.com/package/dotenv#-documentation).

Разобрав, что такое переменные окружение, сразу сделаю отступление, использование переменных приложения будет переработано для выполнения определенных действий. Вся конфигурация будет храниться на основание .env файла, переменных окружений и базовых параметров приложения. Такую переработку начнем с данной статьи. Но прежде чем убрать лишние функции (к переменным из конфига предоставим доступ напрямую) и переработки системы параметров приложений, реализуем все необходимое для работы с переменными окружения.

Для реализации функционала работы с переменными окружения произведём частичное изменение системы. И начнем с установки пакета dotenv.

pnpm i dotenv

После установки пакета создания файла env.libs.js в директории libs. А в нем произведем импорт пакетов fs (является системным пакетом) и dotenv, а также создадим две функции initDotenv и initDefaultEnv, после чего их экспортируем.

Файл env.libs.js
Файл env.libs.js

Теперь разберем какой какой функционал должны выполнять данные функции. initDotenv выполняет роль загрузчика конфигурации из env файла в process.env, данная функция уже реализована на скриншоте 1. Функция initDefaultEnv необходима для того, что бы при вызове в параметрах приложения команды env-init производилось создание файла .env автоматически с базовыми настройками. Данный функционал представлен на скриншоте 2. Для реализации данного механизма использовался try/catch/finally, что бы механизм работы с файловом был максимально безопасным и предсказуемым, а для логирования используется ранее созданный нами logs.libs.js.

initDefaultEnv
initDefaultEnv

После создания функционала в initDefaultEnv реализуем функционал параметра приложения env-init, а также уберем все лишнее. После всех ранее сказанных манипуляций. Импорт config.libs.js необходимо убрать, что бы порядок вызовов не ломал получение данных с process.env.

 initArgs после изменений
initArgs после изменений

Параметр приложения dev как и loglvl для dev мы убираем. Теперь данные параметры мы будем задавать через .env файл или через переменные окружения. Следующим шагом добавим вызов функции initDotenv в app.js в функции runApp. Перед добавлением функции необходимо импортировать сам файл с данной функцией. Следует отметить, что вызов файла конфигурации будет перемещен на место сразу после вызова initDotenv.

добавление initDotenv
добавление initDotenv

Что бы вернуть сервер к предыдущим настройкам, зайдем в файл .env и поправим соответствующие параметры. После изменения параметров работа сервера не поменялась, таким образом следующим этапом мы будем изменять уже config.libs.js.

И начнем с изменения наших переменных. Сейчас мы изменим с константного типа на изменяемый, а после чего пропишем универсальный формат для переменной где начала прописываться будет process.env параметр, а после || будет стандартный параметр от системы. Уберем ненужные функции и пропишем экспорт переменны, таким образов файл config.lib.js будет выглядит следующем образом:

config.libs.js
config.libs.js

После всех проделанных манипуляций нам осталось переделать все вызовы функций из configLib на вызов переменны, который выглядит следующим образом:

Переработка функции runApp с функций на переменные
Переработка функции runApp с функций на переменные

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

Подписывайтесь на наш телеграм канал (https://t.me/rebeltechru), в нем вы можете найти статьи по разработке и сами проекты.