from './postgres.service';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { ConfigService } from '@nestjs/config';
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';
@Module({
providers: [PostgresService],
exports: [PostgresService],
})
export class PostgresModule {
static register(entities: Function[], migrations: Function[], subscribers: Function[]): DynamicModule {
return {
module: PostgresModule,
imports: [
TypeOrmModule.forRootAsync({
useFactory: (configService: ConfigService): TypeOrmModuleOptions => ({
type: 'postgres',
host: configService.get<string>('POSTGRES_HOST'),
port: configService.get<number>('POSTGRES_PORT'),
username: configService.get<string>('POSTGRES_USER'),
password: configService.get<string>('POSTGRES_PASS'),
database: configService.get<string>('POSTGRES_DB_NAME'),
logging: configService.get<string>('POSTGRES_IS_LOGGING_ENABLED') === 'true',
migrationsTableName: '_migrations',
logger: 'advanced-console',
migrations,
entities,
subscribers,
migrationsRun: true,
synchronize: false,
namingStrategy: new SnakeNamingStrategy(),
}),
inject: [ConfigService],
}),
],
exports: [TypeOrmModule],
};
}
}
Добрый вечер, вот наткнулся на такой вариант подключения модуля который подключает Postgres, я не видел до этого чтобы exports возвращал из себя модуль, и то что меня больше всего удивляет что возвращается же не инстанс класса TypeOrmModule, зачем его експортить если его можно просто заимпортить из пакета @nestjs/typeorm в любом необходимом месте?
оно так работает, в импорте ты настраиваешь его в forRootAsync / forFeature, а потом экспортишь сам модуль наружу. Ну и тут все завернуто в динамически настраиваемый модуль PostgresModule.
Обсуждают сегодня