NestJS 기록

Jean·2023년 7월 31일
0
post-thumbnail

Nest Next... 맨날 헷갈림

기본적인 데코레이터

  @Get() //@Post @Put @Delete 등으로 restful API가능 

sayHello() {
    return 'hello this is movie section';
  }

  @Delete(':movieId') 
  deleteMovie(@Param('movieId') id: string, @Body() data) {
    return `DELETE movie id:${id} ${data.title}`;
  }
//@Param으로 파라미터를 @Body로 바디데이터를 @Query로 쿼리스트링을 가져올 수 있다
//두개 이상은 콤마로 구분한다

DTO

계층간 데이터 교환 객체

클라이언트에서 서버로 오는 데이터의 형식을 정할 수 있다

export class CreateBoardDto {
 title: string;
 desc: string;
}

class와 interface로 만들 수 있는데
class가 es6의 표준임으로 런타임으로 동작해서 Nest가 class를 참조할 수 있지만
interface는 타입스크립트에서 지원하는 것으로 변환 중에 제거되어 Nest가 런타임에 참조할 수 없다
출처: Nest 공식 문서

Pipe

서버로 들어오는 데이터를 변환하고 유효성 검사를 하는 데 사용된다

express의 미들웨어와 비슷하다

Nest에는 6개의 파이프가 기본적으로 존재한다 (@nestjs/common에서 불러온다)
커스텀 파이프를 따로 만들 수 있다

파이프의 범위는 3가지가 있다

1. 글로벌

//app.js
  app.useGlobalPipes(new ValidationPipe());

모든 데이터에 유효성 검사 파이프를 추가하는 코드다

1-1. 종속성 주입

모듈의 컨텍스트 외부에서 수행되었으므로 모듈 외부에서 등록된 전역 파이프(위의 예에서와 같이)는 종속성을 주입할 수 없습니다. 이 문제를 해결하기 위해 다음 구성을 사용하여 모든 모듈에서 직접 글로벌 파이프를 설정할 수 있습니다.

@Module({
providers: [
  {
    provide: APP_PIPE,
    useClass: ValidationPipe,
  },
],
})

2. 데코레이터 사용

라우터 하나에서 파이프를 사용할 때

@Post()
@UsePipes(new JoiValidationPipe(createCatSchema))
async create(@Body() createCatDto: CreateCatDto) {
  this.catsService.create(createCatDto);
}

3. 파라미터 단위에서 사용

매개변수에서 불러오기

@Get(':id')
async findOne(@Param('id', new ParseIntPipe()) id) {
  return this.catsService.findOne(id);
}
profile
햇내기 개발자 지망생

1개의 댓글

comment-user-thumbnail
2023년 7월 31일

정보 감사합니다.

답글 달기