DTO

6301 ワード

  • DTO (Data Transfer Object)
  • 階層間データ交換用オブジェクト
    dbからデータを取得してサービス、コントローラなどに送信する際に使用するオブジェクト.
    ネットワークを介してデータがどのように転送されるかを定義するオブジェクト
    インタフェース、classとして定義されます.(Nestjs公式ドキュメントではclassの使用を推奨)
    なぜ使いますか.有効なデータ有効性チェックは、タイプとしても使用できます.
    プロジェクトでBoardに使用される複数のPropertyで使用します.
    一つの場所で名前を変えるには、維持が難しい.
    この場合DTOを使用します.=>フレーム
  • 投稿を生成するDTO


  • DTOをコントローラとサービスに適用しましょう.

    板.controller.ts
  • idを使用して、特定の投稿
  • をインポート
    まずサービスを実施し,コントローラを実施する.(固定順序なし)
    // boards.service.ts
    ...
        getBoardById(id: string): Board{
            return this.boards.find((board) => board.id === id);
        }
    }
    // boards.controller.ts
    ...
        // localhost:3000/boards/123123
        @Get('/:id')
        getBoardById(@Param('id') id: string): Board { // 게시물 하나 리턴
            return this.boardService.getBoardById(id);
            // 파라미터 여러개 있는 경우 다 가져올 때는 
            // @Param() params: string[]
        }
    }
  • idを使用して、特定の投稿
  • を消去します.
    同様に、@Delete("/:id")~
  • Pipe
  • パイプは@Injectable()アクセラレータ付きクラスです
    データ変換(変換)、検証(有効性)チェック用
    変換:入力データを必要なフォーマットに変換します.パイプから自動変換
    ex) string '7' => integer 7
    検証チェック:有効な場合はそのまま転送します.そうでない場合はエラーです.
    メソッドを呼び出す前にパイプを挿入します.
    パイプは、メソッドを指すパラメータを受信し、これに対して操作します.

    パイプの使い方(パイプのバインド)
  • Handlerレベル
  • パラメータレベル
  • グローバル・レベル
  • パイプ検証投稿
  • を使用
    投稿を作成する場合、titleとdescriptionがなくてもエラーは発生しません.
    必要なモジュールnpm i class-validator class-transformer

    @IsNotEmpty-有効性チェック
    値なしでエラー

    @UserPipes(ValidationPipe)コントローラから追加する必要もあります.(Handlerレベル)


    検索に
  • のIDがない、削除時
  • ありません.
    if (!found) {
      throw new NotFoundException(`Can't find Board with id ${id}`);
    }
  • カスタムパイプを使用して、有効性チェック
  • を行います.
    今まで、NestJSがすでに配置されている内蔵パイプを使っていました.
    PipeTransformインタフェースを実装する必要があります.
    PipeTransformインタフェースはすべてのパイプで実装する必要があります
    すべてのパイプにtransform()メソッドが必要です
    このメソッドはnestによってパラメータの処理に使用されます
    2つのパラメータ変換(メタデータを含む処理された値)
    戻り値をroute handlerとして渡す


    readonlyクラスpropertyをstatus値として使用し、PUBLICとPRIVATEのみを受信します.
    読み取り専用メンバーはクラス外部からアクセスできますが、値は変更できません.