👾
Node.js
  • 🧑‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Основи Node.js
      • Вступ
      • Модулі Node.js
      • Запуск скриптів модулів в Node.js
      • Структура проєкту, експорт-імпорт, index.js як хаб
      • Модулі CommonJS
      • Модулі MJS
      • Модулі ECMAScript
      • Модулі NPM + базові модулі
      • Глобальні змінні
      • Робота з файлами
    • 2️⃣Консольні додатки
      • Створення консольних додатків
    • 3️⃣Фреймворк Express
      • Про Express
      • Nodemon і запуски скриптів
      • Postman
      • Проміжне ПЗ middleware
      • Передача даних на сервер
      • Роутінг
      • CRUD
      • Налаштування лінтера
    • 4️⃣REST API
      • Змінні оточення
      • Логування
      • REST
      • Методи HTTP
      • CORS
      • Формування URL для REST API
      • Контроллери відсутнього роуту і непередбачуваної помилки
      • Валідація даних Joi
      • Рефакторинг додатку за MVC архітектурою
      • Express автогенератор додатку
    • 5️⃣База даних Mongo.DB
      • Основи MongoDB
      • Налаштування Mongo Atlas
      • Встановлення локальної MongoDB і основні команди
    • 6️⃣ODM Mongoose
      • Mongoose
      • Порядок планування бекенд додатку
      • чорнетка
    • 7️⃣Автентифякація WJT
      • чорнетка
      • чорнетка 2
    • 8️⃣Файли
      • чернетка
    • 9️⃣тестування
      • чернетка
    • 🔟Page 14
      • імейли
    • чорнетка докер
    • чорнетка сокети
    • додаткові матеріали
    • 👷Практика
      • 1️⃣Page 4
      • 2️⃣Page 5
      • 3️⃣Page 6
      • 4️⃣Page 7
      • 5️⃣Page 8
      • 6️⃣Page 9
  • Про мене
    • Про мене
Powered by GitBook
On this page
  1. Теорія
  2. REST API

Змінні оточення

PreviousREST APINextЛогування

Last updated 1 year ago

При розробці веб-застосунків часто використовується доступ до баз даних, різних сервісів, API тощо. Доступ до цих сервісів відбувається переважно за допомогою секретних ключів. Виникає проблема, коли потрібно синхронізувати проєкт з репозиторієм на GitHub. Адже ці ключі та паролі (з огляду безпеки) не можна викладати у загальний доступ.

Для розв'язання цього питання використовують змінні середовища. Їх створюють за допомогою модуля , а завантажують з файлів з розширенням .env.

Ці файли створює сам розробник. Файли .env можна розмістити як в корені проєкту, так і в якомусь підкаталозі.

Після підключення модуля у нашому додатку, зміні оточення додаються в об'єкт process.env. А вже із нього ці змінні ми можемо використовувати в нашому проєкті.

Файл .env ОБОВʼЯЗКОВО треба додати до файлу .gitignore. Утім, для інших розробників можна створити .env.example зі структурою оригінального файлу, але із заміненими значеннями секретних ключів.

Розберемо роботу з цими файлами:

Встановимо модуль

terminal
npm i dotenv

Заімпортуємо модуль в наш проєкт сервера

index.js
const dotenv = require("dotenv");

У корені проєкту створимо файл .env і додамо у нього змінні:

.env
APP_NAME='My App'
PORT=3000
MONGO_URL='real_mongodb_url'
SECRET_KEY=12345678

Тепер у файлі програми index.js треба якомога раніше підключити наш файл.

index.js
dotenv.config({ path: "./.env" });

І тепер визначені в .env змінні будуть доступні в нашій програмі як:

process.env.APP_NAME;
process.env.PORT;
process.env.MONGO_URL;
process.env.SECRET_KEY;

Щоб в цьому переконатися, можна вивести їх в консоль:

index.js
console.log(process.env.APP_NAME);

У файлі .env ми можемо зберігати URL, порти, ключі від вервісів і баз даних тощо.

Коментарі у файлі .env пишуть після символа #.

Як приклад візьмемо порт нашого сервера з оточення. Можна також (не обовʼязково) якщо порт буде невизначений, то дати йому дефолтне значення 3000:

index.js
// ===========SERVER INIT=========== //
const port = process.env.PORT || 3000;

app.listen(port, () => {
  console.log(`Server is up and running on port ${port}`);
});

Завантаження різних файлів оточення в залежності від запущеного скрипта

При запуску сервера можемо визначити змінну оточення, в якій зберігатимемо назву режиму в якому запускаємо сервер. Для цього пропишемо відповідне налаштування в package.json в розділі scripts:

package.json
"dev": "NODE_ENV=development nodemon index.js",
"prod": "NODE_ENV=production node index.js"

Тобто на цьому етапі ми в змінну оточення process.env.NODE_ENV визначаємо в якому режимі запустили сервер.

Створимо два окремі файли production.env та development.env в яких будемо зберігати різні конфігурації змінних оточення. Покладемо ці файди в папку enviroments.

enviroments/development.env
APP_NAME='dev'
enviroments/production.env
APP_NAME='prod'

Раніше ми вже розглянули підключення файлу змінних оточення. Тепер будемо підключати різні файли в залежності від змінної NODE_ENV визначеної при запуску сервера. Також виведемо в консоль NODE_ENV і APP_NAME і запустимо сервер в різних режимах:

index.js
const envPath =
  process.env.NODE_ENV === "production"
    ? "./enviroments/production.env"
    : "./enviroments/development.env";

dotenv.config({ path: envPath });

console.log(process.env.APP_NAME);
console.log(process.env.NODE_ENV);

Запустимо сервер у двох режимах і переконаємося, що вантажиться відповідний файл змінних оточення:

terminal
npm run dev
terminal
npm run prod

Тобто NODE_ENV - встановлюється під час запуску сервера коли запускаємо скрипт. Відповідно знаючи яка конфігурація оточення у нас, ми й під'єднуємо той чи інший файл змінних оточення.

ЩЕ РАЗ ПОПЕРЕДЖЕННЯ: Ці файли треба додати в .gitignore, бо вони містять секретні дані і не можна їх вантажити на GitHub.

Щоб поділитися шаблоном цих файлів створіть їх копії production.env.example та development.env.example. АЛЕ замініть всі секретні параметри.

Покликання:

📚
4️⃣
dotenv
dotenv
Підсвічення синтаксису файлів .env
Вантажиться development.env
Вантажиться production.env