목차
1. 데코레이터란?
2. 주요 데코레이터
1. 데코레이터란?
- 클래스, 메소드, 접근자 프로퍼티, 매개변수 등에 메타데이터를 추가하여 특정 기능을 제공하는 특별한 선언문
NestJS를 시작하면서 "@" 기호를 사용하는 데코레이터라는 것을 처음 접했을 것이다. 물론 JAVA를 사용하는 프레임워크 중 하나인 Spring에서 어노테이션이라는 같은 문법이 있기에 JAVA사용자는 이미 보았을 수 있다.
데코레이터는 목적에 따라 다양한 것이 있으며 주로 메타 프로그래밍을 통해 코드의 구조와 동작을 정의하고 관리하는데 사용된다.
2. 주요 데코레이터
1 ) Controller
▶ 선언된 클래스가 클래스임을 선언하며 HTTP요청을 처리하는 앤드 포인트를 정의한다.
import {Controller, Get} from '@nestjs/common'
@Controller("user")
class UserController{
@Get()
find(){
return ""
}
}
2 ) Get, Post, Put, Delete등
▶ HTTP요청에 포함된 메서드를 통해 지정한 메서드를 호출한다.(라우팅)
import {Controller, Get,Post,Put} from '@nestjs/common'
@Controller("user")
class UserController{
@Get()
find(){
return ""
}
// /user/create로 요청시 호출
@Post("create")
createUser(데이터){
// 유저 추가
}
@Put
updateUesr(데이터){
// 유저정보 변경
}
@Delete
deleteUser(데이터){
// 유저 삭제
}
}
3 ) Injectable
▶ 클래스가 의존성 주입 시스템에 의해 관리되는 프로바이더임을 선언한다.
import {Injectable} from "@nestjs/common";
@Injectable()
export class UserService{
getUser(){
// 유저정보 반환
}
}
4 ) module
▶ 해당 클래스가 모듈임을 선언한다.
▶ 애플리케이션의 구조를 정의하고 모듈간의 의존성을 관리한다.
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
5 ) Param, Query, Body, Headers
▶ 매서드의 매개변수에서 특정 부분을 추출한다.
- Param : URL경로의 파라미터를 추출한다.
- Query : URL에 포함된 쿼리문자열의 값을 추출한다.
- Body : 요청의 본문의 값을 추출한다.
- Headers : HTTP 헤더의 값을 추출한다.
import {Controller, Get, Post, Query} from "@nestjs/common";
@Controller("user")
export class PostController{
@Get("/:index")
// Param의 인자값은 요청시 키값
findIndex(@Param("index") index:number){
// 인덱스를 통한 service에 데이터 요청
}
@Post("create")
// Body의 인자값은 클라이언트에서 요청시 정의한 데이터의 키으로 구조분해할당과 같다.
// 지정하지 않으면 전체 본문을 들고 온다.
createPost(@Body("title") title:string,@Body("content") content:string){
// 데이터를 저장하는 서비스로직 호출
}
}
이 외에도 데이터 유효성 검증 및 권한부여 등 여러 데코레이터가 있다.