NestJSでDTO(データ転送用オブジェクト)を使用しCRUD操作を行ってみる

検証ライブラリーをインストール npm install class-validator --save これは、見出しの通りPOST時に検証してくるライブラリー。 デコレータおよび非デコレータ ベースの検証の使用を許可します。内部的には、 validator.jsを使用して検証を実行します。Class-validator は、ブラウザと node.js プラットフォームの両方で動作します。 ちなみにバージョンは"class-validator": "^0.14.0"←の通り。 データ転送オブジェクトを作成する データ転送オブジェクト (DTO)とは アプリケーションで受信するデータ用に適切なデータ構造を作成、検証しやすくするもの。 DTO を使うことで、リクエスト本文から抽出されるオブジェクトの形状を指定でき、検証の組み込みが容易になるとのこと。 ちなみにDTOは英語名(Data Transfer Object)と日本語読みの略が一致した稀有な例。 DTO をセットアップする src/sample/dtoにcreate-sample.dto.tsを作成する。ファイルの内容は下記の通り。 import { IsBoolean, IsString } from 'class-validator'; export class CreateSampleDTO { @IsString() firstName: string; @IsString() lastName: string; @IsBoolean() isActive: boolean; } 上記でフィールドのデータ型が stringorboolean型であるかを確認している。 それぞれのファイルにDTOを読み込む ファイルのインポートは割愛する。 sample.controller.ts create() { return this.sService.createSample(); } ↓に変更する。 create(@Body() createSampleDTO: CreateSampleDTO): Promise<Sample> { return this.sService.createSample(createSampleDTO); } sample.service.ts public async createSample(): Promise<Sample> { return await this....

投稿日 · 2023-03-22 · 更新日 · 2024-06-07 · 1 分 · nove-b

NestJsとMySQLでCRUD操作を行ってみた

前回の修正と準備 前回testというEntityを作ったけど、わかりにくくなるのでsampleに変更した。 モジュールの作成 npx nest g module sample まず上記コマンドを使用し、モジュールを作る。なぜモジュール化するかを調べると散らかるので、また別の機会に。 公式ドキュメントに 対応するモジュール ディレクトリ内のドメインの近くに作成することをお勧めします。 と記載されているので、sample.entity.tsを作成したサンプルモジュール内に移行する。 必要なファイルを作成する npx nest g controller sample --no-spec npx nest g service sample --no-spec controllerとserviceを作成する。 controllerはルーティングを指定し、serviceは処理の記述を書くファイルという認識。 最後に、DBと疎通操作するためのRepositoryを作成する。なぜか作成するコマンドが用意されていないようなので、自作する。 cd src/sample touch sample.repository.ts 各ファイルを作成する sample.repository.ts リポジトリはEntityManagerと同じですが、その操作は具象エンティティに限定されます。EntityManagerを介してリポジトリにアクセスすることができます。 上記を読んでもなんのことかわからない。 import { Injectable } from '@nestjs/common'; import { Sample } from 'src/sample/sample.entity'; import { Repository } from 'typeorm'; import { InjectRepository } from '@nestjs/typeorm'; @Injectable() export class SampleRepository extends Repository<Sample> { constructor(@InjectRepository(Sample) repository: Repository<Sample>) { super(repository....

投稿日 · 2023-03-15 · 更新日 · 2024-06-07 · 2 分 · nove-b