Nest.js 설치
- nest.js를 글로벌환경에 설치하고 프로젝트 생성 CLI
$ npm i -g @nestjs/cli
$ nest new '생성하려는 프로젝트이름'
Nest.js 실행
- start:dev로 실행시 package.json에 기술된 스크립트에 --watch 옵션이 포함되어 있어서 코드 변경후 저장할때 마다 서버를 자동으로 다시 실행함
npm run start:dev
Controller 생성
- 컨트롤러는 들어오는 요청을 받고 처리된 결과를 응답으로 돌려주는 인터페이스 역할
- 엔드포인트 라우팅 매커니즘을 통해 각 컨트롤러가 받을 수 있는 요청을 분류
nest g controller '이름'
보일러 플레이트 생성
- '이름'에 해당하는 module, controller, service, entity, dto 등 코드와 테스트 코드를 자동으로 생성해주는 CLI
nest g resource '이름'
Main.ts
//Nest 애플리케이션 인스턴스 생성
import { NestFactory } from '@nestjs/core';
//모듈 import
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Controller
import { Controller, Get } from '@nestjs/common';
//클래스 데코레이터
@Controller('cats')
export class CatsController {
//메서드 데코레이터
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
요청 객체
@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 |
import { Controller, Bind, Get, Req } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
@Bind(Req())
findAll(request) {
return 'This action returns all cats';
}
}
상태코드 지정
- 응답 상태코드는 post 201을 제외하고 기본설정은 200
@Post()
//데코레이터에서 임의로 상태코드를 변경가능
@HttpCode(204)
create() {
return 'This action adds a new cat';
}
응답헤더
@Post()
@Header('Cache-Control', 'none')
create() {
return 'This action adds a new cat';
}
리디렉션
@Get()
@Redirect('https://nestjs.com', 301)
- 'docs' url 호출시
- 리디렉션 경로와 상태코드 지정
- version쿼리 입력시 5인지 아닌지확인
@Get('docs')
@Redirect('https://docs.nestjs.com', 302)
getDocs(@Query('version') version) {
if (version && version === '5') {
return { url: 'https://docs.nestjs.com/v5/' };
}
}