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

  // ... 코드 
}

 

 

참고자료

https://docs.nestjs.com/providers

'프로그래밍 > 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

+ Recent posts