0
0

NestJS Provider 実装方法

Last updated at Posted at 2023-11-05

はじめに

この記事では、NestJS の Provider の実装方法について記載します。

開発環境

開発環境は以下の通りです。

  • Windows11
  • VSCode
  • Node.js 20.5.0
  • NestJS 10.0.0
  • TypeScript 5.1.3

Provider とは

Provider の特徴は以下の通りです。

  • Services, Repositories, Factories, Helpers などの Nest の基本的なクラスの総称
  • 依存対象 (Dependency) として注入 (inject) される

Provider の実装

クラスに @Injectable() デコレーターを追加することで、対象のクラスを Provider として扱うことができます。

以下の例では、CatsService クラスに @Injectable() デコレーターを追加しています。

cats.service.ts
import { Injectable } from '@nestjs/common';
import { Cat } from 'src/interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}
cats.intrface.ts
export interface Cat {
  name: string;
  age: number;
  breed: string;
}

Provider の利用(DI)

先ほど実装した Provider を Controller で利用するためには、constructor を使って DI(依存性の注入)をする必要があります。

以下の例では、CatsController クラスに constructor(private catsService: CatsService) {} を追加しています。

cats.controller.ts
import { Body, Controller, Get, Post } from '@nestjs/common';
import { CreateCatDTO } from 'src/dto/create-cat.dto';
import { Cat } from 'src/interfaces/cat.interface';
import { CatsService } from 'src/services/cats.service';

@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();
  }
}
create-cat.dto.ts
import { ApiProperty } from '@nestjs/swagger';

export class CreateCatDTO {
  @ApiProperty()
  name: string;

  @ApiProperty()
  age: number;

  @ApiProperty()
  breed: string;
}

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0