NestJS: работа с конфигурацией

Под конфигурацией приложения часто понимают установку определенного состояния приложения. Самый простой пример — запуск приложения в режиме разработки или производства. Например, в режиме разработки нам нужно, чтобы приложение показывало нам максимум информации об ошибках. Но когда мы запускаем приложение в production, показывать такую информацию обычным пользователям — не самая лучшая идея.

Также конфигурация подразумевает установку учетных данных для работы с базой данных и сторонними сервисами.

Мы можем хранить такие данные в разных файлах в разных местах приложения, но это будет сложно поддерживать в будущем. Например, при изменении логина или пароля от базы данных нам придется менять все эти данные во всех файлах.

Поэтому лучше хранить все конфигурации в одном файле или в одной директории. Но также следует помнить о безопасности и избегать попадания этих файлов в репозиторий. Даже если репозиторий является частным.

Использование .env файлы.
Мы можем хранить данные конфигурации в файлах .js или .ts. И исключить эти файлы с помощью .gitignore из репозитория. Но обычно для таких случаев используются переменные окружения. Для этого, .env создается файл в корне проекта и туда записываются все конфигурационные данные в формате «ключ = значение».

Это будет выглядеть примерно так:

PORT=3000
MONGO_ROOT_NAME=root
MONGO_ROOT_PWD=example
APP_NAME=Supershop
MONGO_URL=mongodb://user1:example@mongo:27017/dbname
SALT=43fdf6132sda8b94846d1a531d6fdffd
Войти в полноэкранный режим Выход из полноэкранного режима

А чтобы защитить данные от попадания в репозиторий, мы пропишем исключения в файле .gitignore, а также создадим файл с именем .env.example . Он будет храниться в репозитории. Такой файл будет содержать необходимые поля, но без значений. Например:

PORT=
MONGO_ROOT_NAME=
MONGO_ROOT_PWD=
APP_NAME=
MONGO_URL=
SALT=
Войти в полноэкранный режим Выйти из полноэкранного режима

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

Далее мы можем использовать в любом месте нашего приложения переменные окружения, взятые из этого файла.

Использование конфигурации в NestJS.
NestJS имеет свои собственные способы работы с .env файлами. Давайте посмотрим, как мы можем использовать переменные окружения в приложении NestJS.

Для этого нам нужно установить @nestjs/config в нашем приложении.

npm i @nestjs/config
Вход в полноэкранный режим Выйти из полноэкранного режима

После этого в поле импорта модуля добавьте ConfigModule.forRoot() чтобы доступ к переменным окружения был доступен глобально.

// app.module.ts
import { ConfigModule } from '@nestjs/config';

// Other code

@Module({
  imports: [
    ConfigModule.forRoot(),
    // Another imports
  ],
  controllers: [AppController],
  providers: [AppService],
})
Вход в полноэкранный режим Выход из полноэкранного режима

В контроллер конструктор:

import { ConfigService } from '@nestjs/config';

@Controller()
export class AppController {
  constructor(private readonly configService: ConfigService) {}

  // Other code....
}
Ввести полноэкранный режим Выход из полноэкранного режима

Таким же образом вы можете использовать configService в других частях приложения.

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

Оцените статью
devanswers.ru
Добавить комментарий