본문 바로가기

STUDY/Node.js

NestJS | API 만들기 (2) - Controller

Controller

컨트롤러는 요청과 응답을 처리하는 곳. express에서 routing처리 하던 것과 거의 동일하다.
@Controller데코레이터를 사용한다. @Controller데코레이터에 path prefix를 설정할 수 있다.
@Controller('users')/users로 들어오는 모든 요청을 처리하게된다.

import { Controller } from '@nestjs/common';
import { UserService } from './service/user.service';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}
}

HTTP Request Method

Http 요청 역시 데코레이터로 구분한다.

  • @Get
  • @Post
  • @Patch, @Put
  • @Delete
  • @Options
  • @Head
  • @All

컨트롤러 작성해보기

일단 @Get부터 작성해본다. GET /users로 오는 요청은 여기서 처리된다.
path의 값을 받을때는 @Param데코레이터를 사용한다.

/users?page=1&keyword=foo과 같이 Query String을 받을 때는 @Query데코레이터를 사용한다.

  @Get()
  async getUsers(): Promise<ResponseUserDto[]> {
    return await this.userService.findAll();
  }

  @Get(':id')
  async getUser(@Param('id') userId: string): Promise<ResponseUserDto> {
    return await this.userService.findById(userId);
  }



@Post요청 역시 비슷하다. @Body데코레이터로 받을 수 있고, dto로 자동 변환도 된다!

  @Post()
  async createUser(@Body() createDto: CreateUserDto) {
    return this.userService.create(createDto);
  }

전체 코드

async/await을 사용하면, Promise를 반환해야 한다.

import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  ParseIntPipe,
  Patch,
  Post,
} from '@nestjs/common';
import { CreateUserDto } from './dto/create.dto';
import { ResponseUserDto } from './dto/response.dto';
import { UpdateUserDto } from './dto/update.dto';
import { UserService } from './service/user.service';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get()
  async getUsers(): Promise<ResponseUserDto[]> {
    return await this.userService.findAll();
  }

  @Get('/:id')
  async getUser(@Param('id') userId: string): Promise<ResponseUserDto> {
    return await this.userService.findById(userId);
  }

  @Post()
  async createUser(@Body() createDto: CreateUserDto) {
    return this.userService.create(createDto);
  }

  @Patch('/:id')
  async modifyUser(
    @Param('id') userId: string,
    @Body() updateDto: UpdateUserDto,
  ) {
    return this.userService.modify(userId, updateDto);
  }

  @Delete('/:id')
  async deleteUser(@Param('id') userId: string) {
    return this.userService.remove(userId);
  }
}

NestJS 공식 문서 #controllers