NestJS/NestJS 문서화
컨트롤러
남느
2025. 4. 23. 21:28
컨트롤러의 역할
컨트롤러는 어떤 요청을 어떻게 처리하는지 관리하는 역할을 합니다.
컨트롤러 생성 방법
nest g controller 컨트롤러명
nest g co 컨트롤러명 # 약어 사용
nest g co 컨트롤러명 --no-spec # 테스트 파일 생성을 원하지 않을 때
컨트롤러 모듈 등록 방법
컨트롤러를 모듈에 등록해야 컨트롤러가 작동합니다.
@Module({
controllers: [AppController],
})
export class AppModule {}
라우팅
요청 경로를 처리하기 위한 방법을 라우팅이라 합니다.
컨트롤러 자체의 경로와 메소드별 경로를 지정할 수 있습니다.
// 컨트롤러 수준의 라우팅
// http://url/index 패턴과 일치하면 해당 컨트롤러로 진입후 메서드를 찾습니다.
@Controller('index')
export class AppController {
constructor(private readonly appService: AppService) {}
//메서드 수준의 라우팅
// http://url/index/hello
// 'hello'라고 적어도 동일합니다
@Get('/hello')
getHello() {
return 'Hello!';
}
@Get() // http://url/index
getIndex() {
return 'Index page';
}
}
HTTP 메서드
NestJS는 모든 HTTP 메서드에 대한 데코레이터를 제공합니다.
데코레이터 | 기능 |
@Get(’라우팅') | GET 메서드의 라우팅 설정 |
@Post(’라우팅') | POST 메서드의 라우팅 설정 |
@Delete(’라우팅') | DELETE 메서드의 라우팅 설정 |
@Put(’라우팅’) | PUT 메서드의 라우팅 설정 |
@Patch(’라우팅’) | PATCH 메서드의 라우팅 설정 |
@Options(’라우팅') | OPTIONS 메서드의 라우팅 설정 |
@Head(’라우팅’) | HEAD 메서드의 라우팅 설정 |
@All(’라우팅’) | HTTP 메서드를 모두 처리 |
Request 객체
데코레이터를 사용해 HTTP 요청 시 전달되는 요청 객체를 다룰 수 있습니다.
데코레이터 | 기능 |
@Req(), @Request() | request 객체 |
@Res(), @Response() | response 객체 |
@Next() | 다음 미들웨어 사용(NestJS에서 쓸 일 없을 것 같아요) |
@Session() | request 객체의 session 속성 |
@Param(key?: string) | request 객체의 param 속성 |
@Body(key?: string) | request 객체의 body 속성 (주로 Post, Put, Patch 메서드) |
@Query(key?: string) | request 객체의 query 속성 |
@Headers(name?: string) | request 객체의 headers 속성 |
@Ip() | request 객체의 ip 속성 |
경로, 쿼리 매개변수
@Query(), @Param() 데코레이터 사용 예시입니다.
@Get(':id')
find(
@Param() params,
@Param('id') id,
@Query() queries,
@Query('title') title,
) {
// @Param() 데코레이터에 문자열을 전달하지 않으면 모든 param 객체를 전달 받습니다.
// @Param() 데코레이터에 문자열을 전달하면 인자와 일치하는 param 객체의 값을 string으로 전달 받습니다.
const isParamEqual = params.id === id;
// @Query() 데코레이터에 문자열을 전달하지 않으면 모든 query 객체를 전달 받습니다.
// @Query() 데코레이터에 문자열을 전달하면 인자와 일치하는 query 객체의 값을 string으로 전달 받습니다.
const isQueryEqual = queries.title === title;
}
선택적 매개변수 사용법
'라우팅/매개변수' 형식으로 선택적 매개변수를 사용할 수 있습니다.
localhost:3000/id/password
NestJS 10 이하
NestJS 10 버전까지는 Express 4를 사용합니다.
Express 4는 물음표를 사용해 선택적 매개변수를 사용할 수 있습니다.
@Get('/:id?/:password?')
getUsers(@Param('id') id, @Param('password') password) {
console.log(id);
console.log(password);
return `${id}, ${password}`;
}
NestJS 11 이상
NestJS 11 버전부터는 Express 5를 사용합니다.
Express 5는 중괄호 { }를 사용해 선택적 매개변수를 사용할 수 있습니다.
@Get('{/:id}{/:password}')
getUsers(@Param('id') id, @Param('password') password) {
console.log(id);
console.log(password);
return `${id}, ${password}`;
}
리디렉션
응답을 특정 URL로 리디렉션 하려면 @Redirect() 데코레이터 혹은 url을 반환하면 됩니다.
둘 다 반환하는 경우 url 반환이 우선순위가 더 높습니다.
@Get('docs')
@Redirect('https://docs.nestjs.com', 302) // 우선순위가 낮습니다.
getDocs(@Query('version') version) {
if (version && version === '5') {
return { url: 'https://docs.nestjs.com/v5/' }; // 우선순위가 높습니다.
}
}