NestJS CLI 명령어 공식 문서
Module 생성
공식 문서를 보면 CLI에서 module을 생성하는 방법이 명시되어 있다.
명령어 입력
→ 명령어를 입력하면 자동으로 해당 모듈이름의 폴더와 파일을 생성한다.
→ module파일은 보는 것과 같이 빈 껍데기만 생성이 되었다.
→ 물론 직접 폴더를 만들어서 module을 만들 수 있겠지만, nest CLI를 사용하면
app.module 에도 자동적으로 추가해준 것을 확인할 수 있다.
Controller 생성
nest g co cats
로 똑같이 controller를 만들 수 있음, 간편하구만
Service 생성
서비스도 똑같이 생성이 되었고,
잘 보면 @Injectable 어노테이션도 달려있다는 것을 확인할 수 있다.
하지만, 의존성 주입 작업이 필요하다.
controller에 service 주입
import { Controller } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
}
JavaScript
복사
생성자를 만들어서 주입한다.
메소드 생성
import { Controller, Delete, Get, Patch, Post, Put } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
// localhost:8000/cats
@Get()
getAllCat() {
return 'all cat';
}
// localhost:8000/cats/:id
@Get(':id')
getOneCat() {
return 'one cat';
}
@Post()
createCat() {
return 'create cat';
}
@Put(':id')
updateCat() {
return 'update cat';
}
@Patch(':id')
updatePartialCat() {
return 'update partial cat';
}
@Delete(':id')
deleteCat() {
return 'delete cat';
}
}
JavaScript
복사
→ 전체적인 기본 메소드를 세팅하였다.
→ 컨트롤러가 cats로 명시가 되어있으면 기본적으로 URL는 localhost:8000/cats 로 요청을 받게 된다.
→ 컨트롤러 메소드에 :id 명시가 되어있으면, URL는 localhost:8000/cats/:id 로 요청을 받게 된다.
Users 생성
users 도메인으로
Module, Controller, Service 를 생성해준다.
app.module
CLI로 users를 만들었다면, 자동으로 appModule에 각각의 Module이 등록이 된 것을 확인할 수 있다.
이렇게 AppModule에서 다른 모듈들을 관리할 수 있는 구조가 되었다.
이 구조에서는 AppController나 AppService에서 임포트된 모듈의 서비스들을 사용할 수 있게 된다.
Module 데코레이터에서 설정가능한 것들
1. providers
이 모듈 내에서 사용될 서비스, 리포지토리 등을 정의하며, NestJS의 인젝터에 의해 인스턴스화되어 모듈 내에서 공유될 수 있습니다.
2. controllers
이 모듈에 정의된 컨트롤러들을 지정하며, 이 컨트롤러들은 인스턴스화되어 HTTP 요청을 처리하게 됩니다.
3. imports
이 모듈에서 필요한 providers를 제공하는 다른 모듈들을 가져오는 데 사용됩니다.
4. exports
이 모듈에서 제공하는 providers 중 다른 모듈에서도 사용 가능하도록 내보내고 싶은 것들을 지정합니다.
JavaScript
복사
exports 추가 설명
공식문서에는 providersms 기본적으로 캡슐화를 하기 때문에, 해당 모듈 내에서만 사용가능하다. 그래서 exports를 하지 않는 한 사용할 수 없다고 한다.
이런 식으로 exports를 해줘야 전역적으로 사용이 가능하다.