Menu
CoddyTech

DTOs

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

@Body() body: { title: string }はリクエストボディを一か所で記述するだけで、何も検証しません。{ "title": 42 }はそのまま通過します。データ転送オブジェクトであるDTOは、リクエストボディに何が含まれるかを記述するクラスです。

export class CreateOrderDto {
    customer: string;
    express?: boolean;
}

@Post()
create(@Body() dto: CreateOrderDto) {
    return this.ordersService.create(dto);
}

express?は任意のフィールドであることを示します。コントローラーとサービスはこのクラスを共有するため、構造について共通の認識を持てます。

DTOがインターフェースではなくクラスであるのには理由があります。コードの実行時には、インターフェースはほかの型とともに取り除かれますが、クラスはそのまま存在します。また、実行時にリクエストボディを検証できるのは、クラスに付けられたclass-validatorのデコレーターだけです。次のレッスンで説明します。

challenge icon

チャレンジ

簡単
  • dto/create-task.dto.tsでCreateTaskDtoを定義します。titleと、任意のdoneを指定します。
  • POST /tasksのリクエストボディにこれを使います。新しいタスクでは、ボディにdoneが含まれていない場合はfalseになります。
  • { "title": "Pay rent", "done": true }を指定してPOST /tasksを送信し、次に{ "title": 42 }を指定して送信します。

自分で試してみよう

// POST /tasks のリクエストボディを記述する: title と、クライアントが送信した場合は done。
export class CreateTaskDto {}
quiz icon腕試し

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

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