[NestJS] Как использовать TypeOrm для элегантного подключения к базе данных

NestJS

Обзор

  1. TypeORMэто декоратор использования, правильноTypeScriptОчень хорошо поддерживаемая структура ORM. существуетNestJS, через@nestjs/typeorm, используйте декоратор элегантноTypeORM.

Пример использования

  1. первый вconfig/database.tsЭкспорт конфигурации подключения к базе данных:

    export const DatabaseConfig = {
        type: 'mysql',
        host: '127.0.0.1',
        port: 3306,
        username: 'root',
        password: '123456',
        database: 'example',
        entities: [__dirname + '/**/*.entity{.ts,.js}'],
        synchronize: false,
        migrations: ['database/migration/**/*.ts'],
        cli: {
            migrationsDir: 'database/migration/default',
        },
    }
    
  2. затем вormconfig.tsИмпортировать настройки, роль использоватьtypeorm migration:generateЖдатьTypeOrmЭтот файл будет использоваться в команде в качестве конфигурации для подключения к базе данных. существуетTypeOrmВ официальной документации упоминается, что вы можете использоватьormconfig.json,ormconfig.jsилиormconfig.tsспособ установить соединение с базой данных, здесь мы выбираем более гибкую форму файла ts.

    import { DataBaseConfig } from 'config/database'
    
    module.exports = DataBaseConfig
    

    Примечание. Убедитесь, что файл ormconfig.ts такжеtsconfig.jsonОбъем компиляции:

    {
        "include": [
            "ormconfig.ts",
            ...
        ],
        ...
    }
    
  3. существуетapp.module.tsимпортировать настройки, использоватьTypeOrmModule.forRoot(), существуетNestJSкадр, подключиться к базе данных. после,ConnectionиEntityManagerможно вставить в программу. Как указано в официальной документации, если вormconfig.jsonНапишите конфигурацию какforRoot()Параметры по умолчанию, так как мы используем ts файл, нам нужно вручную импортировать конфигурацию)

     import { Module } from '@nestjs/common'
     import { TypeOrmModule } from '@nestjs/typeorm'
     import { DataBaseConfig } from 'config/database'
    
     @Module({
     imports: [TypeOrmModule.forRoot(DataBaseConfig)],
     })
     export class ApplicationModule {}
    
  4. В конкретном модуле через следующий код под текущим модулем прописатьRepository. (пожалуйста, сначала создайте свой собственный./example.entityдокумент)

    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { Example } from './example.entity';
    
    @Module({
    imports: [TypeOrmModule.forFeature([Example])],
    })
    export class ExampleModule {}
    
  5. Впоследствии его можно использовать в виде внедрения зависимостей в сервисы и контроллеры и т. д.Repository.

     import { Injectable } from '@nestjs/common';
     import { InjectRepository } from '@nestjs/typeorm';
     import { Repository } from 'typeorm';
     import { Example } from './example.entity';
    
     @Injectable()
     export class ExampleService {
         constructor(
             @InjectRepository(Example)
             public readonly repo: Repository<Example>,
         ) {}
    
         findAll(): Promise<Example[]> {
             return this.exampleRepo.find();
         }
     }
    

Рекомендуемая практика

  1. Рекомендуется записывать конфигурацию подключения к базе данных в файл .env вместо использованияormconfig.jsonПуть. Преимущество этого заключается в том, что конфиденциальная информация управляется в .env. Кроме того, также удобно расширять подключение к нескольким базам данных. Как читать конфигурационный файл подробно описано в другой статье[NestJS] Информация о конфигурации и переменные среды