DTO
6301 ワード
dbからデータを取得してサービス、コントローラなどに送信する際に使用するオブジェクト.
ネットワークを介してデータがどのように転送されるかを定義するオブジェクト
インタフェース、classとして定義されます.(Nestjs公式ドキュメントではclassの使用を推奨)
なぜ使いますか.有効なデータ有効性チェックは、タイプとしても使用できます.
プロジェクトでBoardに使用される複数のPropertyで使用します.
一つの場所で名前を変えるには、維持が難しい.
この場合DTOを使用します.=>フレーム
DTOをコントローラとサービスに適用しましょう.
板.controller.ts
まずサービスを実施し,コントローラを実施する.(固定順序なし)
// 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[]
}
}
同様に、@Delete("/:id")~
データ変換(変換)、検証(有効性)チェック用
変換:入力データを必要なフォーマットに変換します.パイプから自動変換
ex) string '7' => integer 7
検証チェック:有効な場合はそのまま転送します.そうでない場合はエラーです.
メソッドを呼び出す前にパイプを挿入します.
パイプは、メソッドを指すパラメータを受信し、これに対して操作します.
パイプの使い方(パイプのバインド)
投稿を作成する場合、titleとdescriptionがなくてもエラーは発生しません.
必要なモジュールnpm i class-validator class-transformer
@IsNotEmpty-有効性チェック
値なしでエラー
@UserPipes(ValidationPipe)コントローラから追加する必要もあります.(Handlerレベル)
検索に
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のみを受信します.
読み取り専用メンバーはクラス外部からアクセスできますが、値は変更できません.
Reference
この問題について(DTO), 我々は、より多くの情報をここで見つけました https://velog.io/@bluesun147/DTOテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol