[TIL] NestJS 공부 22일차
사용자 전용 레포지토리
TypeORM에서 제공하는 기능으로 기능은 기본 리포지토리 클래스를 확장 및 풍부하게 만들어준다.
사용방법
우선 생성을 위해선 @EntityRepository()
데코레이터를 이용하고 Repository
class를 확장해줘야한다.
@EntityRepository(Author)
export class AuthorRepository extends Repository<Author> {}
위 코드처럼 사용된다.
클래스를 한번 만들면 다음 단계는 네스트에게 인스턴스화 책임을 전달해야한다.
그렇기위해서 AuthorRepository
클래스를 TypeORM.forFeature
메서드로 넘겨줘야한다.
@Module({
imports: [TypeOrmModule.forFeature([AuthorRepository])],
controller: [AuthorController],
providers: [AuthorService],
})
export class AuthorModule {}
예시다.
@Injectable()
export class AuthorService {
constructor(private authorRepository: AuthorRepository) {}
}
마지막으로 생성자로 넘겨주면 끝난다.
비동기 구성
리포 모듈 옵션을 정적이 아닌 비동기로 구성할 수 있는데,
forRootAsync()
를 이용하는 것이다.
첫 번째 방법은 팩토리 방식이다.
TypeOrmModule.forRootAsync({
useFactory: () => ({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
});
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: 'mysql',
host: configService.get('HOST'),
port: +configService.get<number>('PORT'),
username: configService.get('USERNAME'),
password: configService.get('PASSWORD'),
database: configService.get('DATABASE'),
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
inject: [ConfigService],
});
저 팩토리는 async
과 inject
를 이용하여 다른 비동기 제공자처럼 작동한다.
두 번째 방법은 userClass
를 사용하는 것이다.
TypeOrmModule.forRootAsync({
useClass: TypeOrmConfigService,
});
위 생성은 TypeOrmConfigService
의 TypeOrmModule
을 이용하여 인스턴스화 시킨 것이다.
Author And Source
이 문제에 관하여([TIL] NestJS 공부 22일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ingyocode/TIL-NestJS-공부-22일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)