未知のフィールド
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クライアントに知らせられます。
チャレンジ
簡単- フィールド
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();
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。