Modules

생성일
Dec 19, 2021 08:06 AM
태그
nextjs
모듈은 Nest 앱 구조를 구성하는데 사용하는 메타데이터를 제공함
notion image
 
루트모듈은 앱 그래프를 빌드하는데 사용하는 시작점이다. 각 모듈은 밀접하게 관련된 기능 집합을 캡슐화하는데 사용함.
모듈 데코레이터의 속성
  • providers - 모듈에서 공유될 수 있는 프로바이더
  • controllers - 인스턴스화 되어야 하는 컨트롤러 셋
  • imports - 이 모듈에 필요한 프로바이더를 내보내는 외부 모듈 목록
  • exports - 이 모듈에서 내보낼 프로바이더의 하위집합
 
  • cat.module.ts
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}
 
위 캣모듈을 루트 모듈에 Import 하면 nest에 마운트된다.
import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';

@Module({
  imports: [CatsModule],
})
export class AppModule {}
 

shared modules

Nest에서 모듈은 기본적으로 싱글톤이므로 여러 모듈간에 쉽게 프로바이더의 동일한 인스턴스를 공유할 수 있다. 모든 모듈은 자동으로 공유모듈이므로 일단 생성되면 모든 모듈에서 재사용가능하다.
catService같은 경우 어디서든 import에 catModule을 주입함으로 사용가능
@Module({
  imports: [CommonModule],
  exports: [CommonModule],
})
export class CoreModule {}
이런식으로 re-export 하는 패턴도 사용하는듯함
 
모든 곳에서 동일한 모듈 세트를 가져와야 한다면 Global 옵션을 사용할 수 있다.
import { Module, Global } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Global()
@Module({
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService],
})
export class CatsModule {}
@Global 데코레이터는 모듈을 저녁범위로 만든다.
 
 

동적 모듈

import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
import { Connection } from './connection.provider';

@Module({
  providers: [Connection],
})
export class DatabaseModule {
  static forRoot(entities = [], options?): DynamicModule {
    const providers = createDatabaseProviders(options, entities);
    return {
      module: DatabaseModule,
      providers: providers,
      exports: providers,
    };
  }
}

Loading Comments...