Змінні середовища в NestJS

pic

Змінні середовища (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)

Leave a Reply

Your email address will not be published. Required fields are marked *