Laravel経験者のNestJS入門【概要:サービスプロバイダ】

NestJSにおけるサービスプロバイダに関するお勉強記録です。主に以下のページを見て学んだ内容になります。

Providers | NestJS - A progressive Node.js framework

正直Laravelのサービスプロバイダもよく分かってないので、こっちでもよく分からない。。。

NestJSだと以下の様な感じで@Injectableというデコレータを使ってプロバイダを表すらしい。LaravelだとServiceProviderを継承するようなものでしょうか。

サービス

それではまずはサービスを作成していきます。

サービスの作成

NestJSでは以下のコマンドでサービスを作成できます。

nest g service cats

catsフォルダの下にcats.service.tsという名前でファイルが作成されます。作られた直後の中身はこんな感じです。

app.module.tsにも登録されます。

プロバイダにする

作成されたcats.service.tsには最初から@Injectable()デコレータは設定されていましたので自分で設定する必要はありませんでした。メソッドやインターフェースだけ作成します。

まずはcats.service.tsにメソッドを記述します。

次にcatsフォルダの下にinterfacesというフォルダを作り、cat.interface.tsという名前でインターフェースのファイルを作成し、以下のように編集します。一応以下のコマンドでファイルを作れなくもないです。

g interface cats/interfaces/cat

コントローラでは次のような形でサービスがDIされます。

先に書いたようにnest g service ~コマンドでサービスを作成すると勝手にやってくれてますが、手動でサービスを作成していた場合はapp.module.tsファイルでプロバイダの登録をします。Laravelだとconfig/app.phpのprovidersやaliasesに登録する感じでしょうか。

試してみる

NestJSへアクセスしてみるとまずは空っぽの配列が返ってきます。

次に適当なデータをcurlで数回Postしてみます。

curl -X POST -H "Content-Type: application/json" -d "{\"name\":\"mike\", \"age\":3}" http://localhost:8001/cats

curl -X POST -H "Content-Type: application/json" -d "{\"name\":\"tama\", \"age\":5}" http://localhost:8001/cats

もう一度アクセスしてみるとPostしたデータが返ってきました。

プロバイダはアプリケーションが起動した時にインスタンス化され、アプリケーションの終了時に破棄されるとのことなので、Postしたデータが保持され返すことが出来ました。しかし、リクエストごとにプロバイダを生成・破棄をする事も出来るそうです。

最後に

他にもカスタムプロバイダとかオプショナルプロバイダとか色々書かれていたものの、概要だけで詳しくは別ページ参照となっていたので割愛します。最後の状態のコードを一応置いておきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です