728x90

typescript implements

 

import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { LoggerMiddleware } from './middlewares/logger.middleware';

@Module({
  imports: [ConfigModule.forRoot({})], // module 을 불러왔으면 추가를 해줘야함
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer): any {
    consumer.apply(LoggerMiddleware).forRoutes('*');
  }
}

 

 

implements 에 관한 보기 좋은 글

https://hyunseob.github.io/2016/10/17/typescript-interface/

 

TypeScript: 인터페이스(Interface)

이전 글 - TypeScript: 클래스(Class) 클래스와 인터페이스지금껏 JavaScript만을 다뤄본 개발자라면 인터페이스라는 개념은 익숙치 않을 것이다. 하지만 Java나 C# 등의 정적 타입 언어에서는 이미 많이

hyunseob.github.io

 

injectable

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello'
  }
}

 

 

Injectable 데코레이터를 사용하고있으면 provider 라는 형태를 띄는데 그렇게되면 해당 module에서 providers 에 넣어줘야한다.

@Module({
  imports: [ConfigModule.forRoot({})], // module 을 불러왔으면 추가를 해줘야함
  controllers: [AppController],
  providers: [AppService, UserService],
}

 

 

nestjs dependency injection 는 providers 를 보고 controller 에 Service 들을 넣어줍니다.

import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

 

 

appSerivce 가 타입만 명시하였지만 this.Service.getHello 를 쓸수 있는 이유였습니다.

Serivce 를 provider 를 이용하여 매개변수처럼 받아 사용하는 이유는 test 를 용이 하게 하게끔 하는 이유도 있지만

객체를 내부에서 만들어서 객체에서 의존하면 결합성이 강해져서 단일 책임분리가 어긋나게 됩니다.

728x90

'TypeScript' 카테고리의 다른 글

Typescript Interface  (0) 2021.11.28
Typescript Class  (0) 2021.11.27
typeorm database migration  (0) 2021.06.24
Nestjs 에서 Swagger 사용하기  (0) 2021.06.24
타입 스크립트 프로젝트 만들기  (0) 2020.12.09