요청을 받고 요청에 대해 응답하는 책임을 가지고 있다.
import { Controller, Get, Query, Post, Body, Put, Param, Delete } from '@nestjs/common';
import { CreateCatDto, UpdateCatDto, ListAllEntities } from './dto';
@Controller('cats')
export class CatsController {
consturctor(private readonly userService: UserService){}
// POST /cats
@Post()
@HttpCode(201)
create(@Body() createCatDto: CreateCatDto) {
return 'This action adds a new cat';
}
// GET /cats?limit=10&offset=5
@Get()
@Header('Cache-Control', 'none')
findAll(@Query() query: ListAllEntities) {
return `This action returns all cats (limit: ${query.limit} items)`;
}
// GET /cats/:id
@Get(':id')
findOne(@Param('id') id: string) {
return `This action returns a #${id} cat`;
}
// PUT /cats/:id
@Put(':id')
@HttpCode(204)
update(@Param('id') id: string, @Body() updateCatDto: UpdateCatDto) {
return `This action updates a #${id} cat`;
}
// DELETE /cats/:id
@Delete(':id')
@Redirect('<https://nestjs.com>', 301)
remove(@Param('id') id: string) {
// 여러가지 로직
return `This action removes a #${id} cat`;
}
}
service
, repository
, factory
, helper
등등 의존성으로서 주입될 것들을 의미한다.
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}
@Injectable()
데코레이터를 붙여줌으로서, Nest IoC 컨테이너
가 해당 클래스의 생명주기(언제 클래스가 생성될 것인지)를 관리하도록 한다.
생명주기는 스코프를 확인해보면 알 수 있다.(기본적으로 Injectable로 관리되는 provider들은 싱글톤
으로 관리된다.)
@Injectable({ scope: Scope.REQUEST })
Nest로 만든 어플리케이션은 적어도 하나의 모듈을 갖는다.
모듈은 4개의 property를 갖는다.
controller
를 추가provider
를 추가provider
들의 서브셋을 export한다. 다른 모듈에서 해당 모듈을 import했을 때, 사용가능하다.import { Module } from '@nestjs/common';
import { DatabaseModule } from '../../common/database/database.module'
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { CatsRepository } from './cats.repository';
@Module({
imports: [DatabaseModule],
controllers: [CatsController],
providers: [CatsService, CatsRepository],
exports: [CatsRepository]
})
export class CatsModule {
// 동적 모듈 생성
static forRoot(변수...){
// 로직....
return {
module: CatsModule,
providers: [CatsService, CatsRepository]
exports: [CatsRepository]
}
}
}