讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【NestJS】Pipe機能のメモ

Pipeの利用方法に関するメモ

f:id:keisuke8925gdk:20200115142828p:plain

Pipeは2つのユースケースがある

  1. transformation:インプットデータを望ましい形式に変更する
  2. validation:値が有効かどうか判定して、有効であれば変更しないまま通す、もし有効でなければエクセプションエラーを返す

Pipeを利用するところはController

  • Pipeはコントローラーレベルで利用する(Patch時、Post時など)

Pipeのtransformメソッドと気にする2つの値

  • transform()メソッドは2つの値をもつ

2つの値とは

  1. valuevalueは流れてくる値
  2. metadata: metadataはそのmetadata

元から利用できるPipeの機能

機能 説明
ValidationPipe
ParseIntPipe Stringの値を数値型に変換します
ParseUUIDPipe UUIDであるかどうかを確かめます

※注意 これらのbuilt-in Pipeを利用するには`class-validator' と 'class-transformer'がインストールされている必要があります

Pipeのスコープ4つ

  • method-scoped
  • controller-scoped,
  • global-scoped
  • param-scoped
param-scopeの例
  • Paramスコープのパイプは一つのパラメータのバリデーション時に有効
@Post()
async create(
  @Body(new ValidationPipe()) createCatDto: CreateCatDto,
) {
  this.catsService.create(createCatDto);
}
method-scopedの例
  • method-scopedの場合は@UsePipes()という記載を使います
@Post()
@UsePipes(new ValidationPipe())
async create(@Body() createCatDto: CreateCatDto) {
  this.catsService.create(createCatDto);
}
global-scopedの例
  • もうここまできたら、main.tsに書いてしまいます
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();