@Get(':id')
findOne(@Param() params): string {
console.log(params.id); // 1
return `This action returns a #${params.id} cat`;
}
GET /cats/1
와 같이 request URL에 동적인 정보를 담고 있는 요청인 경우 @Param()
데코레이터를 사용해 Parameter 정보를 가져온다.
다음 처럼 데코레이터 안에 특정한 파라미터를 지정할 수 도 있다
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a #${id} cat`;
}
@Controller
데코레이터에 host
option을 설정해 줄 수 있다.
들어오는 request의 HTTP host와 host
option의 값이 일치하면 해당 라우팅을 처리한다
@Controller({ host: 'admin.example.com' })
export class AdminController {
@Get()
index(): string {
return 'Admin page';
}
}
{ host: 'admin.example.com' }
해당 호스트에서 보낸 request인 경우에만 라우팅을 처리한다path
를 동적으로 처리하기 위해 Route Paramerter를 사용해 @Controller(':id')
를 사용한 것과 마찬가지로 동적인 host를 처리하기 위해 @HostParam
데코레이터를 사용할 수 있다
@Controller({ host: ':account.example.com' })
export class AccountController {
@Get()
getInfo(@HostParam('account') account: string) {
return account;
}
}
@Get()
async findAll(): Promise<any[]> {
return [];
}
async 함수를 사용해서 Promise
를 return 하는데 Nest는 알아서 스스로 resolve한 값을 return 하게 됩니다.
DTO는 네트워크를 통해 주고받는 데이터들을 정의하는 객체입니다.
DTO를 타입스크립트의 인터페이스
나 간단한 클래스로 정의할 수 있습니다.
nestjs는
클래스
를 사용해 DTO를 정의하는 것을 추천합니다.
그 이유는 타입스크립트로 정의하게 되면 그 코드는 컴파일할 때 제거되고 변환되게 됩니다. 그렇게 되면 Nest는 런타임 때 참조할 수 없게 됩니다.
POST
요청을 통해 body안에 담겨 오게되는 데이터를 정의하는 DTO를 작성해봅시다
export class CreateCatDto {
name: string;
age: number;
breed: string;
}
@Post()
async create(@Body() createCatDto: CreateCatDto) {
return 'This action adds a new cat';
}
컨트롤러 파일을 작성했다고 해서 적용되는 것이 아닙니다. 컨트롤러는 항상 module
에 속하게 되는데, @Module
데코레이터 안에 넣어 컨트롤러를 적용해 봅시다.
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
@Module({
controllers: [CatsController],
})
export class AppModule {}
예제 코드를 보면서 배웠던 내용을 정리해봅시다
import { Controller, Get, Query, Post, Body, Put, Param, Delete } from '@nestjs/common';
import { CreateCatDto, UpdateCatDto, ListAllEntities } from './dto';
// @Controller 데코레이터를 사용해 정의힙니다.
// 데코레이터 안에 route를 설정할 수 있습니다.
@Controller('cats') // /cats 라우팅을 처리합니다.
export class CatsController {
// POST 메서드를 처리합니다.
@Post()
create(@Body() createCatDto: CreateCatDto) { // DTO를 정의하여 Body에 담겨 들어오는 데이터를 정의합니다.
return 'This action adds a new cat';
}
@Get()
findAll(@Query() query: ListAllEntities) { // @Query 데코레이터를 사용해서 query를 가져옵니다.
return `This action returns all cats (limit: ${query.limit} items)`;
}
@Get(':id') // Method 데코레이터 안에 동적인 Param을 가져옵니다
findOne(@Param('id') id: string) { // @Param 데코레이터를 사용해서 Param을 가져옵니다.
return `This action returns a #${id} cat`;
}
@Put(':id') /
update(@Param('id') id: string, @Body() updateCatDto: UpdateCatDto) {
return `This action updates a #${id} cat`;
}
@Delete(':id')
remove(@Param('id') id: string) {
return `This action removes a #${id} cat`;
}
}