설정 값이나 동적으로 생성되는 의존성에 따라 모듈의 동작을 조정할 수 있다.
사용 예시
모듈에 외부의 값을 주입해야 하는 경우
여러 설정 옵션을 지원해야 하는 재사용 가능한 모듈이 필요할 경우
조건에 따라 모듈의 동작을 다르게 구성해야 하는 경우
호출되는 메서드
- 이름은 임의로 지을 수 있으나 보통 다음과 같이 사용한다. forRoot() register()
- module 속성의 객체를 반환해야 한다.
메소드 내의 인스턴스
-
import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
import { Connection } from './connection.provider';
@Module({
providers: [Connection], // default provider, 메서드 내에서 동적으로 제공 가능
})
export class DatabaseModule {
// 동기적 / 비동기적으로 동적 모듈을 반환한다.
// static으로 지정 > 클래스 인스턴스 생성하지 않고 메소드 사용 가능
static forRoot(entities = [], options?): DynamicModule {
const providers = createDatabaseProviders(options, entities);
return {
module: DatabaseModule,
providers: providers,
exports: providers,
};
}
}
import { Module } from '@nestjs/common';
import { DatabaseModule } from './database/database.module';
import { User } from './users/entities/user.entity';
@Module({
imports: [DatabaseModule.forRoot([User])],
})
export class AppModule {}
환경 설정 용도의 파일
미리 .env를 삽입해두면 그 하위 모듈에서는 모두 process.env를 통해 값에 접근할 수 있다.
env 파일 설정 / forRoot 메소드 활용 /
https://choi-records.tistory.com/entry/NestJS-Nest-Config-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EA%B4%80%EB%A6%AC
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from './config/config.module';
@Module({
imports: [ConfigModule.register({ folder: './config' })],
// class instance가 아닌 register() 호출
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
참고
https://cdragon.tistory.com/entry/NestJS-Module-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-%EB%8F%99%EC%A0%81-%EB%AA%A8%EB%93%88Dynamic-modules
https://docs.nestjs.com/fundamentals/dynamic-modules