После некоторых начальных проблем у меня была с этой темой, я решил провести некоторое время, чтобы посмотреть в разные варианты. Вот обзор результатов:
Это самый очевидный способ настроить базу данных. Просто напишите параметры (URL, имя пользователя, …) в коде, где вы импортируете Типрм Отказ
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
С этим много проблем. Вы не можете легко изменить это в развернутом приложении, он охватывает ваш app.module.ts Файл и если вы совершаете это на публичное хранилище, вы делаете данные доступа к базу данных. Также, если вы всегда сложные конфигурации кода, как это, вы можете в конечном итоге иметь их по всему месту в вашем коде. Поэтому, хотя это нормально для быстрого теста в вашей среде разработки, я бы не рекомендовал использовать это намного больше, чем это.
Tourmm предлагает возможность пройти параметры конфигурации для одной или нескольких баз данных, использующих ormconfig.json Файл Отказ
Этот файл включает в себя все соответствующие параметры конфигурации. В моем случае это было не так много:
{
"type": "mongodb",
"url": "mongodb+srv://:@some.subdomains.of.mongodb.net/"
}
При использовании ormconfig.json. , вы не должны ставить какие-либо варианты в app.module.ts где вы импортируете вход.
Настройка входа. Этот способ – это чистое решение, у вас есть один файл для подключения к базе данных (ы), и вы можете настроить более одной базы данных в этом файле. Недостаток в том, что вы должны иметь этот дополнительный файл. Таким образом, в некоторых средах, где вы не сможете получить доступ к всем файлам приложения, изменяя эту базу данных может быть сложной.
Как описано здесь Можно настроить входной момент, используя переменные среды. Tourmm предлагает список разных переменных для использования в этом случае. Это использует либо .env.env. -ФИЛЬ или фактические переменные среды.
Ограничение этого метода в том, что можно только настроить одну базу данных. Но если вам нужна только одна база данных в вашем приложении, это хороший способ быстро настроить вход в зависимости от окружающей среды.
Это сочетает в себе асинхронную конфигурацию, описанную в Nestjs Документация С модулем конфигурации из Stresjs. , что поддерживает при получении ценностей из переменных среды.
По сути, вы должны создать сервис, который может быть введен в импорт в экземпляре, и это реализует Типрмоптенционные продукты интерфейс. Значения этой службы обеспечивают в некорре, получены из модуля Configure Config.
Для моего MongoDB это выглядит так:
import { Injectable } from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from "@nestjs/typeorm";
@Injectable()
export class MongoDBConfigService implements TypeOrmOptionsFactory {
constructor(private configService: ConfigService) {}
createTypeOrmOptions(): TypeOrmModuleOptions {
return {
type: 'mongodb',
url: this.configService.get('MONGODB_URL'),
username: this.configService.get('MONGODB_USER'),
password: this.configService.get('MONGODB_PASSWORD'),
};
}
}
Вы можете создать такую услугу за базу данных, необходимую вам. Используя его, чтобы настроить вход в ваш app.module.ts будет выглядеть так:
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true
}),
TypeOrmModule.forRootAsync({
useClass: MongoDBConfigService,
inject: [MongoDBConfigService]
})
],
controllers: [AppController],
providers: [AppService, MongoDBConfigService],
})
export class AppModule {}
Преимущество этого метода, состоит в том, что вы можете настроить несколько баз данных из среды приложения и сохранить ваше приложение. Module.ts более или менее чистым. Нижний вид есть, требуется еще несколько шагов.
Так как я новичок в Nestjs и впринимаю, я пишу то, что я учусь. Так что, если я пропустил метод, чтобы сделать это или что-то, что я написал неверно, пожалуйста, дайте мне знать!
Оригинал: “https://dev.to/raphael_haecker/nestjs-and-typeorm-database-configuration-15ob”