Menu
CoddyTech

未知のフィールド

CoddyのNode.jsジャーニー「TypeScriptとNestJS」セクションの一部。レッスン 12/17。

クライアントは、DTOに記載されていないフィールド({ "title": "x", "admin": true }など)を送信でき、それらは変更されずにコードへ渡されます。ValidationPipeには、それらを処理するための2つのオプションがあります。

app.useGlobalPipes(
    new ValidationPipe({ whitelist: true }),
);

whitelist: trueを指定すると、メソッドがリクエスト本文を受け取る前に、検証デコレーターのないフィールドがすべて削除されます。さらにforbidNonWhitelisted: trueを指定すると、代わりにパイプがそのようなリクエスト本文を拒否し、400と"property admin should not exist"を返します。forbidNonWhitelistedはwhitelistと併用した場合にのみ機能し、単独では何もしません。

余分な入力を送信するフォームには、黙って削除する方法が適しています。拒否すれば、titelのような入力ミスをAPIクライアントに知らせられます。

challenge icon

チャレンジ

簡単
  • フィールド CreateTaskDto を含む POST /tasks は、そのフィールド名を示す 400 を返さない。
  • 有効なリクエストボディには、引き続き 201 を返す。
  • { "title": "Book flights", "owner": "admin" } を指定して POST /tasks を送信し、次に { "title": "Book flights" } を指定して送信する。

自分で試してみよう

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    app.useGlobalPipes(new ValidationPipe());
    await app.listen(3000);
}
bootstrap();
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

TypeScriptとNestJSのすべてのレッスン