Decorator
•
클래스 위의 함수
•
꾸며주는 함수나 클래스랑 붙어있어야 함 = 데코레이터랑 함수 사이에 빈칸이 있으면 안됌
틀린 예
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
TypeScript
복사
옳은 예
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
TypeScript
복사
•
종류
데코레이터 | 역할 | 호출시 전달되는 인자 | 선언 불가능한 위치 |
클래스 데코레이터 | 클래스의 정의를 읽거나 수정 | (constructor) | d.ts 파일, declare 클래스 |
메서드 데코레이터 | 메서드의 정의를 읽거나 수정 | (target, propertyKey, propertyDescriptor) | d.ts 파일, declare 클래스, 오버로드 메서드 |
접근자 데코레이터 | 접근자의 정의를 읽거나 수정 | (target, propertyKey, propertyDescriptor) | d.ts 파일, declare 클래스 |
속성 데코레이터 | 속성의 정의를 읽음 | (target, propertyKey) | d.ts 파일, declare 클래스 |
매개변수 데코레이터 | 매개변수의 정의를 읽음 | (target, propertyKey, parameterIndex) | d.ts 파일, declare 클래스 |
와일드카드 라우팅
•
패턴기반 라우터
•
예시
@Get('ab*cd')
findAll() {
return 'This route uses a wildcard';
}
TypeScript
복사
@Get()
expressjs의 get router과 유사 - 조회
@Get('/') function(param: type): returntype {return} = app.get('/', (param) => {})
url을 가져와 함수로 매핑한다.
@Get() // = '/#'
@Get('/hello') // /hello
sayHello(): string {
return 'hello everyone';
}
TypeScript
복사
@Post()
expressjs의 post router과 유사 - 생성, 수정
@Post() function(param: type): returntype {return} = app.post('/', (param) => {})
@Post()
create(@Body() movieData: CreateMovieDto) {
return this.moviesService.create(movieData);
}
TypeScript
복사
@Delete()
resource의 삭제를 요청
@Delete(':id')
remove(@Param('id') movieId: number) {
return this.moviesService.deleteOne(movieId);
}
TypeScript
복사
@Put()
서버에게 전체 resource의 업데이트 요청
@Patch()
서버에게 일부 resource의 업데이트를 요청
// @Put() // 모든 리소스 업데이트
@Patch(':id') // 일부 특정 리소스만 업데이트
path(@Param('id') movieId: number, @Body() updateData: UpdateMovieDto) {
return this.moviesService.update(movieId, updateData);
}
TypeScript
복사
@Redirect(url, [status])
•
http status code 기본값 : 302
•
예시
@Get("docs")
@Redirect("https://docs.nestjs.com")
getDocs(@Query("version") version) {
if (version && version === "7") {
return {url: "https://docs.nestjs.com/v5/"};
}
}
TypeScript
복사
Param decorators
Nest | Express | 설명 |
@Request(), @Req() | req | 요청 |
@Response(), @Res() | res | 응답 |
@Next() | next | |
@Session() | req.session | 세션 |
@Param(param?: string) | req.params / req.params[param] | 라우트 파라미터 인수 (/123) |
@Body(param?: string) | req.body / req.body[param] | post 방식으로 넘어오는 인수 값 (JSON) |
@Query(param?: string) | req.query / req.query[param] | get방식으로 넘어오는 쿼리 스트링 인수 (/123?honey=321) |
@Headers(param?: string) | req.headers / req.headers[param] | HTTP 헤더 값 (key:? value:?) |
@Ip() | req.ip | 클라이언트의 IP Address |
@HostParam() | req.hosts |