Змінні середовища (Environment variables) є важливою частиною сучасної розробки додатків, дозволяючи вам керувати налаштуваннями конфігурації в різних середовищах без необхідності змінювати код. У цьому посібнику я покажу, як ефективно використовувати змінні середовища в додатках на NestJS, від базової налаштування до більш складних шаблонів використання.
Початок роботи зі змінними середовища
Спочатку налаштуємо наш проект із необхідними залежностями.
Ми використаємо популярний пакет @nestjs/config
, який дозволяє працювати із змінними середовища в додатках на NestJS.
npm install @nestjs/config
# або за допомогою yarn
yarn add @nestjs/config
Базова настройка
Створіть файл .env
у корені вашого проекту:
DATABASE\_USER=myuser
DATABASE\_PASSWORD=mypassword
API\_KEY=your\_api\_key
PORT=3000
Не забудьте додати .env
до файлу .gitignore
:
# .gitignore
.env
Імпортуйте ConfigModule
у ваш AppModule
:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true, // Робимо конфігурацію доступною глобально
}),
],
})
export class AppModule {}
Використання змінних середовища у ваших сервісах
Тепер, коли ми налаштували конфігурацію, давайте розглянемо різні способи використання змінних середовища у вашому додатку.
Метод 1: Використання ConfigService
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class DatabaseService {
constructor(private configService: ConfigService) {
// Отримуємо значення змінних середовища
const dbUser = this.configService.get\('DATABASE\_USER');
const dbPassword = this.configService.get\('DATABASE\_PASSWORD');
// Ви можете задати значення за замовчуванням
const port = this.configService.get('PORT', 3000);
}
}
Метод 2: Використання валідації схеми змінних середовища
Важливо перевіряти ваші змінні середовища, щоб виявити помилки конфігурації на ранніх етапах.
Ось як реалізувати валідацію за допомогою Joi:
import * as Joi from 'joi';
// app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
validationSchema: Joi.object({
DATABASE\_USER: Joi.string().required(),
DATABASE\_PASSWORD: Joi.string().required(),
API\_KEY: Joi.string().required(),
PORT: Joi.number().default(3000),
}),
}),
],
})
export class AppModule {}
Розширені патерни конфігурації
Для більш складних налаштувань ви можете використовувати файли конфігурацій:
// config/configuration.ts
export default () => ({
database: {
user: process.env.DATABASE\_USER,
password: process.env.DATABASE\_PASSWORD,
},
api: {
key: process.env.API\_KEY,
},
port: parseInt(process.env.PORT, 10) || 3000,
});
Потім імпортуйте його в ваш AppModule
:
@Module({
imports: [
ConfigModule.forRoot({
load: [configuration],
isGlobal: true,
}),
],
})
export class AppModule {}
Перекладено з: [Environment Variables in NestJS](https://medium.com/@a.pouryousefi98/environment-variables-in-nestjs-5625047489da?source=rss------javascript-5)