Controller 생성하기
nest g controller [컨트롤러 이름]
*.controller.spec.ts 은 테스트 파일로 생성을 원치 않으면 명령어 뒤에 --no-spec 을 붙여주면 된다.
요청 처리 방식
@Controller('boards')
export class BoardsController {
@Get()
getBoards() {
return []
}
}
NestJS의 컨트롤러는 스프링의 컨트롤러와 매우 유사하다. 엔드포인트를 설정하는 데코레이터는 다르지 않지만 파라미터를 바인딩하는 데코레이터에는 차이가 있다.
Path Parameter
@Controller('boards')
export class BoardsController {
// GET hostname:3000/boards/1
@Get('/:id')
getBoardById(@Param('id') id: string): Board {
return this.boardsService.getBoardById(id);
}
}
메소드 배치를 주의해서 사용해야 하는데 이런 순서대로 배치할 경우 search 도 id라는 변수의 값으로 인식하기 때문에 아래와 같은 순서대로 바꿔주어야 한다. 위에서부터 차례대로 매칭하며 내려간다고 생각하면 좋을 거 같다.
// AS-IS
@Get('/:id')
@Get('/search')
// TO-BE
@Get('/search')
@Get('/:id')
Query Parameter
@Controller('boards')
export class BoardsController {
// POST hostname:3000/boards?title=제목&description=내용
@Post()
createBoard(
@Query('title') title: string,
@Query('description') description: string,
){
this.boardsService.createBoard(title, description);
}
}
Query 파라미터는 @Query() 데코레이터가 아닌 @Param() 데코레이터를 사용해도 정상 작동한다. 하지만 범용성 보다는 명확한 게 항상 좋은 법이기 이에 @Query 데코레이터를 사용하자.
또한 변수명이 하나이거나 같더라고 꼭 데코레이터에 인자로 변수명을 주어야하며 필요에 의해서는 직접 Pipe를 구현하여야 선언한 타입으로 값을 받을 수 있다. [NestJS 커스텀파이프로 데이터 바인딩 및 유효성 검사]
Request Body
@Controller('boards')
export class BoardsController {
// POST localhost:3000/boards
@Post()
createBoard(
@Body('title') title: string,
@Body('description') description: string,
){
return this.boardsService.createBoard(title, description);
}
/* DTO 방식
@Post()
createBoard(@Body() createBoardDto: CreateBoardDto){
return this.boardsService.createBoard(createBoardDto);
}
*/
}
@Body 데코레이터를 사용하며 직접 필드 하나하나를 선언해도 되지만 DTO를 파라미터로 선언하면 알아서 바인딩해 준다. [NestJS 커스텀파이프로 데이터 바인딩 및 유효성 검사]
728x90
'Javascript > NestJS' 카테고리의 다른 글
NestJS Provider, Service에 대해 알아보기 (0) | 2023.03.22 |
---|---|
NestJS Pipe에 대해 알아보기 (0) | 2023.03.14 |
커스텀파이프로 데이터 바인딩 및 유효성 검사 (0) | 2023.03.13 |
NestJS Module에 대해 알아보기 (0) | 2023.03.13 |
프로젝트 구조 (0) | 2023.03.13 |