Laravel経験者のNestJS入門【概要:パイプ】

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

Pipes | NestJS - A progressive Node.js framework

NestJSのパイプとはLaravelでいうFormRequestでバリデーションするような機能です。バリデーションやリクエストデータの型変換などを実施するために使われます。

パイプ

パイプの機能を試すために適当なコードを追加し下準備をします。

下準備

前回までのcats.controller.tsのコードにfindOne()というメソッドを追加します。http://localhost:8001/cats/1とアクセスするとサービスクラスのfindOne()メソッドを呼び出してreturnするだけです。

cats.service.tsにもメソッドを用意します。

この状態でhttp://localhost:8001/cats/abcの様に本来数字を期待している所へ文字列を渡しても値が返らないだけでエラーになりません。

パイプの利用

パイプを利用するには1行目にあるように@nestjs/commonからParseIntPipeをインポートし、23行目の様に@Paramデコレータの第2引数に渡してあげるだけです。@Paramだけでなく@Queryや@Bodyでも使えます。

これだけで以下の様なエラーを返すようになります。また、Parseと名が付いているように型の変換もしてくれています。上記の例だと文字列から数値に変換してくれてますのでidは数値として扱えます。

その他のパイプ

以下の様なパイプが用意されているそうです。

  • ValidationPipe
  • ParseIntPipe
  • ParseBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
  • DefaultValuePipe

カスタムパイプ

自前のパイプを作るには以下の様なコマンドを実行します。

nest g pipe common/pipe/sample

適用するには同様にインポートして@Paramに渡すだけです。

パイプを生成した直後のコードは以下の様な状態です。valueには検証対象の値が、metadataには名前の通りメタデータが入っています。どんなメタデータが入っているかは見た方が早いと思いますので、以下に上記を実行した場合のサンプルを掲載します。

ここに好きな検証なり変換なりを実施しreturnしてあげます。

元のドキュメントにはjoiとかclass-validator、class-transformerといったライブラリを活用した、もっと高度なやり方が書かれていましたが、長いし説明できるほど理解できないので割愛します。一応今回のサンプルコードを置いておきます。

コメントを残す

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