본문 바로가기

node.js

Nest.js - 모듈

모듈

@Module()모듈은 데코레이터 로 주석이 달린 클래스 입니다. 데코레이터는 Nest 가 애플리케이션 구조를 구성하는 데 사용하는 메타 @Module()데이터를 제공합니다 .

 

각 애플리케이션에는 최소한 하나의 모듈인 루트 모듈 이 있습니다. 루트 모듈은 Nest가 애플리케이션 그래프 를 빌드하는 데 사용하는 시작점입니다. Nest가 모듈과 공급자 관계 및 종속성을 해결하는 데 사용하는 내부 데이터 구조입니다. 아주 작은 응용 프로그램에는 이론적으로 루트 모듈만 있을 수 있지만 일반적인 경우는 아닙니다. 구성 요소를 구성하는 효과적인 방법으로 모듈을 사용 하는 것이 좋습니다. 따라서 대부분의 응용 프로그램에서 결과 아키텍처는 각각 밀접하게 관련된 기능 집합을 캡슐화하는 여러 모듈을 사용 합니다 .

데코레이터는 속성 이 @Module()모듈을 설명하는 단일 객체를 사용합니다.

 

providers Nest 인젝터에 의해 인스턴스화되고 적어도 이 모듈에서 공유될 수 있는 제공자
controllers 인스턴스화해야 하는 이 모듈에 정의된 컨트롤러 세트
imports 이 모듈에 필요한 공급자를 내보내는 가져온 모듈 목록
exports 그 하위 집합은 providers이 모듈에서 제공하며 이 모듈을 가져오는 다른 모듈에서 사용할 수 있어야 합니다. 공급자 자체 또는 해당 토큰( provide값) 만 사용할 수 있습니다.

모듈 은 기본적으로 공급자를 캡슐화 합니다. 즉, 현재 모듈의 일부도 아니고 가져온 모듈에서 내보낸 것도 아닌 공급자를 주입할 수 없습니다. 따라서 모듈에서 내보낸 공급자를 모듈의 공용 인터페이스 또는 API로 간주할 수 있습니다.

 

모듈을 생성하려면 $ nest g module cats명령어 사용(tip ->nest g co cats로 controller ,nest g service cats로 service 생성 향후에 사용)

생성완료

이와 같이 nest g mo user를 통해 하나의 모듈을 더 생성해준다.

 

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
import { UserModule } from './user/user.module';

@Module({
  imports: [CatsModule, UserModule],
  controllers: [AppController], // 주입 받은 객체
  providers: [AppService], //주입할 객체
})
export class AppModule {}

추가한 모듈이 imports에 추가되어 CatsModule과 UserModule 이 app.module.ts 로 하나로 묶이고 app.module.ts 은

 

main.ts로 간다. 이렇게 imports를 하게 되면 CatsModule,UserModule  에서 export한 객체 (Nest ioc 에 등록한 컨테이너 객

 

체)들을 사용 할 수 있다.  export를 하지 않으면 사용할수 없다(캡슐화)