Providers

황성호·2021년 3월 10일
0

NestJs

목록 보기
3/4

대부분의 기본 Nest 클래스(services, repositories, factories, helpers, and so on)는 provider로 다루어짐
주요 idea는 의존성을 주입하는것
많은 객체들은 다른 객체와 관계를 맺으며, 객체의 인스턴스 연결은 대부분 Nest 런타임에 이루어짐

//cats.service.ts
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;
  }
}

데이터 저장 및 검색을 담당하고 CatsController에서 사용하도록 설계되었으므로 provider로 정의하였음

nest g service cats
위 명령어로 서비스 생성 가능
CatsService는 하나의 프로퍼티와 두개의 메소드로 구현된 기본 클래스이지만 @injectable() 데코레이터가 있다는 점이 새로움
@injectable()는 CatService가 Nest IoC컨테이너에서 관리할 수 있는 클래스라는 것을 선언하는 메타데이터를 attach함

//interfaces/cat.interface.ts
export interface Cat {
 name: string;
 age: number;
 breed: string;
}
//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) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

위 컨트롤러를 실행하기 위해서는 dto와 post요청할 폼이 필요하다.
dto와 post폼은 간단하게 만들어 보았다
해당 경로에 맞게 작서성하여 post폼을 보내고 get요청을 보내면 작성한 데이터를 확인할 수 음

//create-cat.dto.ts
import { Entity } from 'typeorm';

@Entity()
export class CreateCatDto{
    name: string;
    age: number;
    breed: string;
}
<!-- post폼-->
<body><pre style="word-wrap: break-word; white-space: pre-wrap;">[]</pre>
    <div>
        <form action="/cats" method="post">
        <p>이름 : <input type="text" name="name"></p>
        <p>나이 : <input type="number" name="name"></p>
        <p>breed : <input type="text" name="name"></p>

        <input type="submit" value="정보 넘기기">
    </div>
</body>

Scopes
프로바이더의 스코프는 애플리케이션의 생명주기와 동기화됨
어플리케이션의 시작되면(bootstrapped) 모든 의존성은 해결되고 모든 프로바이더는 인스턴스와 됨
애플리케이션이 종료되면 프로바이더들도 종료됨
프로바이더들의 생명주기를 지정하는 방법은 다음을 참고
https://docs.nestjs.com/fundamentals/injection-scopes

옵셔널 프로바이더
커스텀프로바이더
프로퍼티 기반 인젝션
프로바이더 등록
위 4개의 내용은 머리에 정확히 정립이 되지않아 다음에 추가할것!
https://docs.nestjs.com/providers

profile
개발!

0개의 댓글