これはなに?
前回の記事に続いて、今回は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として認識させることができます。
ロジックの記載
export interface Cat {
readonly name: string
readonly age: number
}
まずcatの型を定義します。
今回は簡単にnameとageを持たせます。
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からの呼び出し
export interface CreateCatRequest {
readonly name: string
readonly age: number
}
@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を触っていきたいと思います。
ではまた!
参考記事