개발/NestJs

1. 프로젝트 생성과 구성

희묭 2023. 10. 9. 21:30

1. 프로젝트 생성과 구성


1) 프로젝트 생성

$ yarn add @nestjs/cli
$ nest new 프로젝트명 (yarn선택)

2) Nest 기본구성

  • 모듈
    $ nest g mo module-name
    
    외부로 서비스를 공개하고 싶을경우 export 추가
  • @Module({
      controllers: [CatsController],
      providers: [CatsService],
      exports: [CatsService],
    })
    export class CatsModule {}
    
  • 컨트롤러
    $ nest g co controller-name
    
  • 서비스
    $ nest g service service-name
    

    3) Nest 응용구성
  • 미들웨어
    $ nest g middleware middleware-name
    
    적용시 모듈을 아래와같이 수정
  • export class AppModule {}
    =>
    export class AppModule implements NestModule {
    configure(consumer: MiddlewareConsumer) {
      consumer.apply(MiddlewareNameMiddleware).forRoutes('*');
    }
    }
    
  • 필터
    $ nest g filter filter-name
    
    개별 적용시 컨트롤러를 아래와같이 수정전체 적용시 메인을 아래와같이 수정
  • const app = await NestFactory.create(AppModule);
    app.useGlobalFilters(new HttpExceptionFilter());
    await app.listen(3000);
    
  • @Get()
    @UseFilters(HttpExceptionFilter)
    getAllCat() {
      throw new HttpException({ koko: 'fail' }, HttpStatus.FORBIDDEN);
      return 'all cat';
    }
    
  • 파이프
    $ nest g pipe pipe-name
    
    파라메터 적용시 아래와같이 수정커스텀 파이프작성시 아래와 같이 생성
  • @Injectable()
    export class PostiveIntPipe implements PipeTransform {
      transform(value: any, metadata: ArgumentMetadata) {
          if (value < 0) {
            throw new HttpException();
          }
          return value;
      }
    }
    
  • @Get(':id')
    getOneCat(@Param('id', ParseIntPipe) id: number) {
      return 'one cat';
    }
    
  • 인터셉터(AOP)
    $ nest g interceptor interceptor-name
    
    인터셉터 적용시 아래와 같이 사용인터셉터 구현
  • @Injectable()
    export class InterceptorNameInterceptor implements NestInterceptor {
      intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
          return next.handle().pipe(map((data) => ({ success: true, data })));
      }
    }
    
  • @Get('test2')
    @UseInterceptors(InterceptorNameInterceptor)
    getHello2(@Param() param: { id: string }): string {
      return this.catsService.getHello();
    }
    
  • 라이프사이클
    • 글로벌 -> 개별
    • request -> middleware -> guard -> interceptor -> pipe -> controller

4) 실행

$ yarn start
$ yarn start:dev
 

'개발 > NestJs' 카테고리의 다른 글

6. AXIOS 통신  (0) 2023.10.20
5. 스케쥴링  (0) 2023.10.20
4. 로그  (0) 2023.10.20
3. 외부환경파일  (0) 2023.10.20
2. 데이터베이스  (0) 2023.10.20