controller

https://docs.nestjs.com/controllers

cats.controller.ts created with CLI '$ nest g controller cats'
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}

Response#

  • 표준
    • JS 객체 - (직렬화) → JSON
    • 원시값 → 값
    • 상태 코드
      • post (201)
      • else (200)
      • 커스텀
  • 라이브러리
    • findAll(@Res() response)response.status(200).send()

클라이언트 요청 객체 (@Res() response)#

@Request(), @Req()req
@Response(), @Res()*res
@Next()next
@Session()req.session
@Param(key?: string)req.params / req.params[key]
@Body(key?: string)req.body / req.body[key]
@Query(key?: string)req.query / req.query[key]
@Headers(name?: string)req.headers / req.headers[name]
@Ip()req.ip
@HostParam()req.hosts

표준 HTTP 데코레이터#

  • @Get, @Post, @Put, @Delete, @Patch, @Options, @Head
  • @All endpoint that handles all of them.

라우트 와일드 카드#

@Get("ab*d") → 정규식

상태코드#

@Post()
@HttpCode(204)
create() {
return 'This action adds a new cat';
}

헤더#

@Header('Cache-Control, 'none')`

리디렉션#

{
"url": string,
"statusCode": number # default 302 Found
}
  • @Redirect('https://nestjs.com', 301)
  • @Redirect('https://nestjs.com')
  • override
    @Get('docs')
    @Redirect('https://docs.nestjs.com', 302)
    getDocs(@Query('version') version) {
    if (version && version === '5') {
    return { url: 'https://docs.nestjs.com/v5/' };
    }
    }

Route parameters#

@Get(':id')
findOne(@Param() params): string {
return `This action returns a #${params.id} cat`;
}
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a #${id} cat`;
}

하위 도메인 라우팅#

호스트 매개변수 토큰

@Controller({ host: ':account.example.com' })
export class AccountController {
@Get()
getInfo(@HostParam('account') account: string) {
return account;
}
}

Scope#

요청 간의 거의 모든 것이 공유된다. (다중 스레드가 아님)

  • DB Connection Pool, 전역 상태 싱글톤 서비스
  • GraphQL 의 요청별 캐싱 등 제어 가능한 항목이 있다.

비동기성#

@Get()
async findAll(): Promise<any[]> {
return [];
}
  • Promise 의 결과 값을 받는 방법
@Get()
findAll(): Observable<any[]> {
return of([]);
}

페이로드 요청#

export class CreateCatDto {
name: string;
age: number;
breed: string;
}
@Post()
async create(@Body() createCatDto: CreateCatDto) {
return 'This action adds a new cat';
}

CreateCatDto 는 클래스로 작성한다.

Controller 를 NestJS 가 알게 하기 app.module.ts#

@Module({
controllers: [CatsController],
})
export class AppModule {}

응답 객체, 라이브러리 종속성#

@Res → express 에 종속

  • 테스트 작성시 express 의존 필요
  • Nest 표준 응답 처리 위반 - Interceptor, Decorators 호환 문제
  • @Res({ passthrough: true }) 설정으로 해결가능
Last updated on