LoginSignup
9
5

More than 1 year has passed since last update.

NestJSの基本的な構成 ~Provider編~

Posted at

これはなに?

前回の記事に続いて、今回はProviderについて理解しようと思ったので記事にしました。

この記事が新たにNestJSに入門する方の手助けになれば幸いです。

この記事のゴール

以下の理解が得られることをゴールとします

  • Providerの役割が理解できること

Providerってなに?

  • 名前の通り機能を提供するところ
  • Controllerよりも複雑な処理を担う
  • 従ってビジネスロジックはProviderに記載する

前回やったControllerはURIの設計だったりユーザーからのリクエストの処理を担っていましたが、Providerはそのリクエストの具体的な処理を担っています。

※前回の記事はこちら

ロジックを記載する場所と認識しても問題ないかと思います。

それほど理解にするのに難しい箇所ではないので使い方に進みます。

Providerを作成してみる

以下のように書くことでProvider(Service)を作成できます。

$ nest g s cat

しばらくするとsrc/cat/cat.service.tsが作成されていることが確認できると思います。

各要素の説明

@Injectable()

import { Injectable } from '@nestjs/common'

@Injectable()
export class CatService {}

@Injectable()と書くことでTypeScriptのクラスをProviderとして認識させることができます。

ロジックの記載

cat.interface.ts
export interface Cat {
  readonly name: string
  readonly age: number
}

まずcatの型を定義します。
今回は簡単にnameとageを持たせます。

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

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

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

  findAll(): Cat[] {
    return this.cats
  }
}

具体的なロジックはCatService内に記載します。

catsに新しいcatを追加する処理とcatsを取得する処理を書いています。

Controllerからの呼び出し

create-cat-request.dto.ts
export interface CreateCatRequest {
  readonly name: string
  readonly age: number
}
cat.controller.ts
@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();
  }
}

実際にNestJSを起動してcurlでcreateCatを叩いてみましょう。

$ curl -X POST -H "content-type: application/json" -d '{name:"mike", age: "10"}' localhost:3000/cat/createCat

上のスクリーンショットはhttp://localhost:3000/cat/getAllCatsでfindAllから取得した全ての猫の情報を表示しています。

実際にcurlで叩いた猫が表示されているのが分かると思います。

まとめ

  • Providerはユーザーから受け取ったリクエストに対して具体的な処理を記載する場所

余談

今回は割とスッと理解しやすいものでした。

引き続きNestJSを触っていきたいと思います。

ではまた!

参考記事

9
5
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
9
5