NESTJS CRUD操作の例

Emily Anne Brown
リリース: 2025-03-07 18:43:15
オリジナル
464 人が閲覧しました

NESTJS CRUD操作の例

この例は、NESTJを使用したエンティティの基本的なCRUD(作成、読み取り、更新、削除、削除)操作を示しています。 データベースインタラクションにTypeormを利用します。 次のように定義されている

エンティティがあると仮定します:Cat Cat

次に、
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class Cat {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  age: number;
}
ログイン後にコピー
>>ファイルを作成しましょう。これは、基本的な完全な、CRUDの例を提供します。 cats.controller.ts

サービスを作成します。リポジトリ(通常、Typeormが提供する)を使用してデータベース操作を実行します。このサービスはデータアクセスロジックをカプセル化し、コントローラーがリクエストの処理に合わせてクリーンで焦点を合わせたままにします。
import { Controller, Get, Post, Body, Param, Delete, Put } from '@nestjs/common';
import { CreateCatDto } from './create-cat.dto';
import { Cat } from './cat.entity';
import { CatsService } from './cats.service';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto): Promise<Cat> {
    return this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }

  @Get(':id')
  async findOne(@Param('id') id: string): Promise<Cat> {
    return this.catsService.findOne(+id);
  }

  @Put(':id')
  async update(@Param('id') id: string, @Body() updateCatDto: CreateCatDto): Promise<Cat> {
    return this.catsService.update(+id, updateCatDto);
  }

  @Delete(':id')
  async remove(@Param('id') id: string): Promise<void> {
    return this.catsService.remove(+id);
  }
}
ログイン後にコピー

cats.service.tsコントローラーを作成します。 Nestjsデコレーター(@controller、@get、@post、@put、@delete、@body、@param)は、httpリクエストをコントローラーメソッドにマッピングするために使用されます。 データベース固有の操作を処理し、サービスが基礎となるデータベーステクノロジーとは独立したままになります。 Typeormは一般的な選択肢であり、自動スキーマ生成や移行などの機能を提供します。これにより、セキュリティが向上し、コードの読み取り可能性が向上します。

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Cat } from './cat.entity';
import { CreateCatDto } from './create-cat.dto';

@Injectable()
export class CatsService {
  constructor(
    @InjectRepository(Cat)
    private catsRepository: Repository<Cat>,
  ) {}

  async create(cat: CreateCatDto): Promise<Cat> {
    const newCat = this.catsRepository.create(cat);
    return this.catsRepository.save(newCat);
  }

  async findAll(): Promise<Cat[]> {
    return this.catsRepository.find();
  }

  async findOne(id: number): Promise<Cat> {
    return this.catsRepository.findOneBy({ id });
  }

  async update(id: number, cat: CreateCatDto): Promise<Cat> {
    await this.catsRepository.update(id, cat);
    return this.catsRepository.findOneBy({ id });
  }

  async remove(id: number): Promise<void> {
    await this.catsRepository.delete(id);
  }
}
ログイン後にコピー

crud機能を備えたネストアプリケーションを構築するためのベストプラクティスは何ですか?npm install @nestjs/typeorm typeormormconfig.jsonいくつかのベストプラクティスは、NESTJSアプリケーションの保守性とスケーラビリティを改善します。

  • モジュラー設計:機能性(ユーザーモジュール、製品モジュールなど)に基づいてコードをモジュールに整理します。これにより、コードの組織と再利用性が向上します。
  • 懸念の分離:コントローラー(リクエストの取り扱い)、サービス(ビジネスロジック)、およびリポジトリ(データアクセス)間で厳密に分離された懸念。これにより、セキュリティとデータの一貫性が向上します。
  • 入力検証:クラスバリダーターまたは同様のライブラリを使用してユーザー入力を検証して、データベースに無効なデータに到達するのを防ぐためにユーザー入力を検証します。コード。
  • テスト:
  • コードの正確性と信頼性を確保するためのユニットと統合テストの書き込み。避けるべき落とし穴には、次のものが含まれます。
  • 入力検証が不十分です。ユーザー入力を検証できないと、セキュリティの脆弱性(SQLインジェクションなど)とデータの不一致につながる可能性があります。 潜在的な例外を常に処理し、意味のあるエラーメッセージを返してください。
  • コントローラーのビジネスロジックのミキシング:コントローラーは、主にルーティングリクエストに焦点を当てる必要があります。 複雑なビジネスロジックは、サービスに存在する必要があります。
コントローラーでの直接データベースアクセス:

コントローラーは、データベースと直接対話しないでください。 常にサービスとリポジトリのレイヤーを使用してください。

過度に複雑なコントローラー:
    キープコントローラーは無駄のないフォーカスを維持します。 大規模で複雑なコントローラーは、維持とテストが困難です。
  • テストの欠如:
  • テストが不十分な場合は、バグや回帰につながる可能性があります。 コントローラーとリポジトリのサービスと統合テストのユニットテストを作成します。
  • ページネーションとフィルタリングを無視してください。
  • 大規模なデータセットの場合は、パジネーションとフィルタリングを実装してパフォーマンスとユーザーエクスペリエンスを向上させます。 リクエストごとにデータセット全体を取得しないでください

以上がNESTJS CRUD操作の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート