Под конфигурацией приложения часто понимают установку определенного состояния приложения. Самый простой пример — запуск приложения в режиме разработки или производства. Например, в режиме разработки нам нужно, чтобы приложение показывало нам максимум информации об ошибках. Но когда мы запускаем приложение в 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.