Controller

황성호·2021년 3월 10일
0

NestJs

목록 보기
2/4
post-thumbnail

공식문서에 있는 개략적인 설명을 살펴보고 문서에 있는 예제중 몇개만 테스트할 것이다.

Routing
Controllers는 리퀘스트와 리스폰스 데이터를 처리한다

@Controller() 데코레이터로 기본 Controller( basic controller)를 지정 가능하다

그럼 컨트롤러를 만들어 보자!

nest g controller cats
명령으로 cats컨트롤러를 만들고 /board/src/cats/cats.controller.ts에 아래와 같이 작성해보자

//cats.controller.ts
import { Controller, Get } from '@nestjs/common'; //모듈 임포트

@Controller('cats')//컨트롤러 localhost:3000/[여기들어가는거]
export class CatsController {
  @Get()
  findAll(): string {//function localhost:3000/cats/[여기들어가는거]
    return 'This action returns all cats';
  }
}

작성후 RUN!
npm run start
localhost:3000/cats접속시 입력한 문자열 This action returns all cats이 리스폰스 되는걸 확인할 수 있다
개념

  • findAll () 메서드 앞에있는 @Get () HTTP 요청 메서드 데코레이터는 Nest에 HTTP 요청에 대한 특정 엔드 포인트에 대한 핸들러를 생성하도록 지시
  • 핸들러에 대한 경로 경로는 컨트롤러에 대해 선언 된 (선택 사항) 접두사와 요청 데코레이터에 지정된 경로를 연결하여 결정됨

응답과 관련하여
Standard(표준)

  • 이 내장 메서드를 사용하면 요청 핸들러가 자바 스크립트 객체 또는 배열을 반환 할 때 자동으로 JSON으로 직렬화됨
  • 하지만 자바 스크립트 기본 유형 (예 : 문자열, 숫자, 부울)을 반환하면 Nest는 직렬화를 시도하지 않고 값을 반환
  • 값만 반환하면 Nest가 나머지 작업을 처리

Request object

  • nest js는 플랫폼에 기반한 Request object를 지원하나
  • 아래는 Req리퀘스트에 대한 예제!
import { Controller, Get, Req, Param } from '@nestjs/common';
import { Request } from 'express';

@Controller('cats')
export class CatsController {
  @Get()
  myID(@Req() params): string {
    return 'my id is '+params.query.id;
  }
}

아래는 Request Object의 종류이다

@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

Route wildcards

@Get('ab*cd')
findAll() {
  return 'This route uses a wildcard';
}


Status code

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

Headers

@Post()
@Header('Cache-Control', 'none')
create() {
  return 'This action adds a new cat';
}

Redirection

@Get()
@Redirect('https://nestjs.com', 301)

Route parameters

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

비동기

@Get()
async findAll(): Promise<any[]> {
  return [];
}

위코드는 정상 작동한다고한다

++Library-specific

import { Controller, Get, Post, Res, HttpStatus } from '@nestjs/common';
import { Response } from 'express';//응답을 위핸 express에서 Response 객체 임포트

@Controller('cats')
export class CatsController {
  @Get()
  create(@Res() res: Response) {//응답을 위한 res객체
    res.status(750).send('Library-specific!!');//임의의 750응답코드와 문자열을 반환
  }
}

profile
개발!

0개의 댓글