wam
w__am 개발노트
wam
  • 분류 전체보기 (165)
    • CS 지식 (10)
      • 자료구조 (0)
      • 알고리즘 (0)
      • 컴퓨터 구조 (0)
      • 운영체제 (0)
      • 네트워크 (7)
      • 데이터베이스 (0)
      • 디자인 패턴 (3)
    • Frontend (131)
      • Three.js (64)
      • NPM (1)
      • Nest.js (19)
      • React (10)
      • Apollo (7)
      • TypeScript (2)
      • JavaScript (12)
      • HTML, CSS (1)
      • Jest (3)
      • E2E (5)
      • Cypress (7)
    • Database (12)
      • TypeORM (12)
    • IT 지식 (8)
      • 클라우드 서비스 (3)
      • 네트워크 (1)
      • 데이터 포맷 (2)
      • 기타 (2)
    • IT Book (2)
    • 유용한 사이트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 🐱 Github

인기 글

태그

  • 함수 리터럴
  • three.js 구성 요소
  • joi 에러
  • 삼각함수
  • 렌더링 성능 최적화
  • math.sin()
  • type-graphql
  • Interface
  • 함수 표현식
  • 오프-프레미스(off-premise) 방식
  • 스코프
  • 초기 환경설정
  • react 성능 최적화
  • 원형적인 움직임
  • threejs 개발 할 때 도움을 줄 수 있는 유틸리티
  • API
  • isabstract
  • reactive variables
  • 함수 선언문
  • 함수의 범위
  • 데이터 포맷
  • getdelta()
  • Decorators
  • e.preventdefault()
  • 디자인 패턴
  • getelapsedtime()
  • gridhelper
  • axeshelper
  • math.cos()
  • mapped types

최근 글

관리자

글쓰기 / 스킨편집 / 관리자페이지
hELLO · Designed By 정상우.
wam

w__am 개발노트

NestJS : 라우터 및 데코레이터 설명
Frontend/Nest.js

NestJS : 라우터 및 데코레이터 설명

2023. 1. 9. 16:38

 

Single Responsibility Principle 따르자

하나의 module, class 혹은 function이 하나의 기능은 꼭 책임져야 한다.

하나의 module, class 혹은 function이 하나의 기능은 꼭 책임져야 한다. 객체 지향 프로그래밍에서 단일 책임 원칙(single responsibility principle)이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.   _출처: 위키백과

 

 


 

  • decorator에서 뭔가를 원한다면 요청을 해야 한다.
  • parameter 필요하면 직접 요청해야 한다.
  • body 가 필요하면 직접 요청해야 한다.

 

  • ExpressJs에서 body를 json으로 리턴하려면 설정을 해줘야 했다.
  • NestJs에서는 json으로 바로 받을 수 있다.

 

 


 

컨트롤러 추가 "movies"

// src/movies/movies.controller.ts

import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Patch,
  Post,
  Query,
} from '@nestjs/common';
import { Movie } from './entities/movie.entity';
import { MoviesService } from './movies.service';

@Controller('movies')
export class MoviesController {
  constructor(private readonly moviesService: MoviesService) {}

  @Get()
  getAll(): Movie[] {
    return this.moviesService.getAll();
  }

  @Get('/:id')
  getOne(@Param('id') movieId: string) {
    return this.moviesService.getOne(movieId);
  }

  @Post()
  create(@Body() movieData) {
    return this.moviesService.create(movieData);
  }

  @Delete('/:id')
  remove(@Param('id') movieId: string) {
    return this.moviesService.deleteOne(movieId);
  }

  @Patch('/:id')
  patch(@Param('id') movieId: string, @Body() updateData) {
    return this.moviesService.update(movieId, updateData);
  }
}

 

@Controller('movies')

  • Controller의 이름값으로 URL이 만들어진다.
  • http://localhost:3000/movies
  • Controller의 이름 부분은 URL의 Entry Point(엔트리 포인트)를 컨트롤한다.
  • express.js 애플리케이션을 쓸 때의 라우터와 같다.

 

 

URL의 파라미터 값을 얻을 때

  @Get('/:id')
  getOne(@Param('id') movieId: string) {
    return this.moviesService.getOne(movieId);
  }
  • 예를 들어, getOne()에서 요청하는 방법은 파라미터를 요청하는 것이다.
  • 파라미터의 decorator를 사용한다면 NestJS는 URL에 있는 id 파라미터를 원하는 것을 알 수 있게 된다.
  • id라는 파라미터를 movieId라는 argument에 string 타입으로 저장한 것

 

  • 라우터의 @Get('/:id')와 @Param('id') 이름이 같아야 한다.
  • @Param('id')와 파라미터의 argument인 movieId: string는 이름이 달라도 된다. 

 

 

Update 데코레이터 (Put, Patch)

  @Patch('/:id')
  patch(@Param('id') movieId: string, @Body() updateData) {
    return this.moviesService.update(movieId, updateData);
  }
  • 전체 movie를 업데이트할 때 = Put 사용
  • movie의 일부분만 업데이트할 때는 patch 사용

 

 

@Post에서 request의 body 부분을 가져오고 싶을 때

    @Post()
    create(@Body() movieData) {
        console.log(movieData)
    	return this.moviesService.create(movieData);
    }
  • Body 내용을 가져올 때 @Body 데코레이터를 사용하면 된다.

 

 

Query 데코레이터 사용하기

    @Get('search')
    search(@Query('year') searchingYear: string){
        return `We are searching for a movie made after: ${searchingYear}`;
    }
  • 예를 들면 2000년 이후에 movie 만 가져오고 싶을 때 name 같은 query argument를 보내보기
  • http://localhost:3000/movies/search?year=2000


 [위치 주의] search 부분이 get(:id) 보다 밑에 있으면 NestJS는 search를 id로 판단한다.

// [잘못된 위치] (:id) 보다 아래 있으면 안된다.

src/movies/movies.controller.ts

import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';

@Controller('movies')
export class MoviesController {
    @Get()
    getAll(){
        return 'This will return all movies';
    }

    @Get('/:id')
    getOne(@Param('id') movieId: string){
        return `This will return one movie with the id: ${movieId}`;
    }

    @Get('search') // 여기에 위치하면 안된다!
    search(){
        return 'We are searching for a movie with a title: ';
    }
}
// [정확한 위치] (:id) 보다 위에 있어야 한다.

src/movies/movies.controller.ts

import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';

@Controller('movies')
export class MoviesController {
    @Get()
    getAll(){
        return 'This will return all movies';
    }

    @Get('search') // 여기에 위치하면 된다!
    search(){
        return 'We are searching for a movie with a title: ';
    }

    @Get('/:id')
    getOne(@Param('id') movieId: string){
        return `This will return one movie with the id: ${movieId}`;
    }
}

 

 

 

저작자표시 변경금지 (새창열림)

'Frontend > Nest.js' 카테고리의 다른 글

NestJS : 예외처리  (0) 2023.01.10
NestJS : 형변환  (0) 2023.01.09
NestJS : 아키텍처  (0) 2023.01.09
Nuxt, Next, Nest 차이점  (0) 2022.12.30
Express가 좋을까 NestJS가 좋을까?  (0) 2022.12.30
    'Frontend/Nest.js' 카테고리의 다른 글
    • NestJS : 예외처리
    • NestJS : 형변환
    • NestJS : 아키텍처
    • Nuxt, Next, Nest 차이점
    wam
    wam

    티스토리툴바