Providers ?
- NestJS 에서 가장 근본적인?기본적인 개념
- 기본적인 Nest의 대부분의 class 들이 Providers 로 취급되어지기 때문
- service, repositories, factories, helpers,.. 같은 것들이 providers 에 해당
주요역할
- 의존성 주입 ( dependency injection),
- 비지니스 로직에 맞게 디자인된 클래스( service, repositories, factories, helpers,..) 를 불러와서 다른 클래스에 주입하여 디자인된 패턴을 연결을 시키는 것.
- 코드를 보면 비지니스 로직에 맞게 디자인된 클래스( service, repositories, factories, helpers,..)를 불러와서 인스턴스를 생성하는것 과 같다.
- service 와 controller의 사이를 두고 보면 Provider가 service를 제공하면 Consumer(controller)가 제공된 서비스를 이용하는 구조(인스턴스 생성)
적용하는 방법
(예) cats.services.ts 를 생성하고 사용하는 경우
1. @Injectable() 을 클래스 선언 전에 꼭 붙일것
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
@Injectable() //<-- 필수
export class CatsService {
private readonly cats: Cat[] = [];
// 필요한 코드
}
2. module.ts 에 있는 providers에 생성한 클래스들을 등록 필수
// app.module.ts
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService], // <-- 등록 필수
})
export class AppModule {}
3. 적용 Dependency injection
// cats.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {} // <- Dependency injection
// ... 코드
}
참고자료
'프로그래밍 > Nest.js' 카테고리의 다른 글
[ NestJS] [errror] No metadata for "User" was found. (0) | 2024.04.23 |
---|---|
[ NestJS ] Modules (0) | 2024.04.18 |
[NestJS] TypeORM 설정방법 (0) | 2024.04.17 |
[ NestJS] DTO? (0) | 2024.04.17 |
[ NestJS ] Controllers (0) | 2024.04.15 |