개요
HTTP를 통해 Controller에 전달되는 요청은 종류가 다양하다.
HTTP 메서드도 여러가지 있지만, 데이터 전달 방식도 여러가지다.
- Route Parameter 방식: localhost:3000/users/1
- Query 방식: localhost:3000/users?name=김만보&gender=male
- Body 방식: localhost:3000/users (데이터는 body에 담겨서 전달됨)
- 등등.
이 포스트에서는 NestJS에서 흔하게 쓰는 기초적인 방식 3가지 정도를 적어보려고 한다.
- Route Parameter
- Query
- Body
Body 방식의 경우, JSON 텍스트 방식만 다루려고 한다. (Multipart나 Graphql은 나중에...)
Route Parameter
Request: GET localhost:3000/users/1
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get(':id')
findUserById(@Param('id') user_id: string): Promise<UserEntity> {
return await this.userService.findUserById(user_id);
}
}
위의 요청에서 유저 아이디는 1이고, 아이디는 unique 하다고 가정했다.
@Param 어노테이션을 통해서 @Get()에 지정한 Route Parameter를 읽어오고 user_id 변수에 넣어주었다.
Query
Request: GET localhost:3000/users?name=김만보&gender=male
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
findUser(
@Query('name') name: string,
@Query('gender') gender: string,
): Promise<UserEntity[]> {
return await this.userService.findUser(name, gender);
}
}
위의 요청은 name과 gender를 기준으로 유저들을 찾는다고 가정하였다.
@Query 어노테이션을 통해서 URL 쿼리를 읽어올 수 있다.
Body
Request: POST localhost:3000/users
data: { "name": "김만보", "gender": "male" }
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post()
createUser(@Body() body) {
return await this.userService.createUser(body.name, body.gender);
}
}
이번에는 POST 요청의 Body에서 이름과 성별을 받아 유저를 생성한다고 가정하였다.
@Body 어노테이션을 통해 Body의 내용을 가져올 수 있는데, 사실 이건 그렇게 많이 쓰는 방식은 아니다.
미리 설명해두자면 보통은 DTO 클래스를 생성해서 다음과 같이 사용한다.
@Post()
createUser(@Body() createUserDto: CreateUserDto) {
return await this.userService.createUser(body.name, body.gender);
}
DTO를 사용하면 데이터를 Validation 하기 좋고, 객체로서 데이터를 관리할 수 있다.
이건 다른 포스트에서 정리해보려고 한다.
마무리
일단 가장 기본이라고 생각되는 Request 데이터 처리 방식 3가지 정도를 정리해보았다.
개발을 하다보면 필요에 따라서 여러가지 방식을 섞기도 하고, 이것저것 추가되기도 한다.
나중에 좀 복잡한 케이스를 정리한 포스트도 적어보고자 한다.
각 코드는 돌려본게 아니라 바로바로 작성한 것이라 오타 등이 있을 수 있습니다.
참고용으로만 써주세요.
'개발공부 > NestJS' 카테고리의 다른 글
[Jest] 테스트에서 Logger 배제하기 (0) | 2022.06.25 |
---|---|
[Jest] Mock Sentry functions (0) | 2022.06.25 |
[NestJS] Modules & Controllers & Providers (3) (0) | 2021.09.11 |
[NestJS] Modules & Controllers & Providers (2) (0) | 2021.09.11 |
[NestJS] Modules & Controllers & Providers (1) (0) | 2021.09.10 |