>웹 프론트엔드 >JS 튜토리얼 >Nestjs Crud 작업 예제

Nestjs Crud 작업 예제

Emily Anne Brown
Emily Anne Brown원래의
2025-03-07 18:43:15471검색
nestjs crud 작업 예

이 예제는 Nestjs를 사용하는

엔티티의 기본 CRUD (작성, 읽기, 업데이트, 삭제) 작업을 보여줍니다. 데이터베이스 상호 작용에 TypeOrm을 사용하겠습니다. 다음과 같이 정의 된 엔티티가 있다고 가정합니다.

이제 Cat 파일을 만들어 봅시다 : Cat

<code class="typescript">import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

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

  @Column()
  name: string;

  @Column()
  age: number;
}</code>
및 해당

: cats.controller.ts

필요한 패키지를 설치해야합니다. 이것은 기본적으로 기본적이고 crud 예제를 제공합니다.
<code class="typescript">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);
  }
}</code>

Nestjs에서 기본 CRUD 작업을 구현하려면 어떻게해야합니까? cats.service.ts Nestjs에서 기본 CRUD 작업을 구현하는 방법은 일반적으로 다음 단계를 포함합니다.

<code class="typescript">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);
  }
}</code>
Entity를 정의하십시오 :

타입 모델 사용을 나타내는 유형 클래스 생성 (@entity). @PrimaryGeneratedColumn, @Column 등). 이것은 데이터베이스의 데이터 구조를 정의합니다. npm install @nestjs/typeorm typeorm 서비스 생성 : ormconfig.json이 레이어는 데이터와 상호 작용하기위한 비즈니스 로직을 처리합니다. 데이터베이스 작업을 수행하기 위해 저장소 (일반적으로 TypeOrm에서 제공)를 사용합니다. 이 서비스는 데이터 액세스 로직을 캡슐화하여 컨트롤러가 요청 처리에 깨끗하고 집중할 수 있도록합니다.

컨트롤러 생성 :

이 레이어는 들어오는 HTTP 요청 (게시, Get, Get, Put, Delete)을 처리합니다. 실제 데이터 조작을 서비스에 위임합니다. Nestjs Decorators (@controller, @get, @post, @put, @delete, @body, @param)는 http 요청을 컨트롤러 메소드에 매핑하는 데 사용됩니다.

리포지토리 (예 : TypeOrm) 사용 : 리포지토리는 데이터베이스 상호 작용에 대한 추적 계층을 제공합니다. 데이터베이스 별 운영을 처리하여 서비스가 기본 데이터베이스 기술과 무관하게 유지 될 수 있습니다. TypeOrm은 자동 스키마 생성 및 마이그레이션과 같은 기능을 제공하는 인기있는 선택입니다.

데이터 전송 개체 (DTOS) :

HTTP 요청에서받은 데이터를 검증하고 구조화하기 위해 DTOS를 만듭니다. 이것은 보안을 향상시키고 코드 가독성을 향상시킵니다.
    CRUD 기능을 갖춘 NestJS 응용 프로그램을 구성하는 모범 사례는 무엇입니까?
  1. 몇 가지 모범 사례는 NestJS 응용 프로그램의 유지 관리 가능성과 확장 성을 향상시킵니다.
      모듈 식 디자인 :
    • 기능 (예 : 사용자 모듈, 제품 모듈)을 기반으로 코드를 모듈로 구성하십시오. 이것은 코드 조직 및 재사용 성을 향상시킵니다. 우려 사항 분리 : 컨트롤러 (핸들링 요청), 서비스 (비즈니스 로직) 및 리포지토리 (데이터 액세스) 간의 우려 사항을 엄격히 분리하십시오. 이것은 보안 및 데이터 일관성을 향상시킵니다. 입력 유효성 검증 : 데이터베이스에 도달하는 것을 방지하기 위해 클래스 밸리 디터 또는 유사한 라이브러리를 사용하여 사용자 입력을 검증하십시오. 오류 처리 :
    • 강력한 오류 처리 메커니즘을 구현하고 적절한 HTTP 상태를 반환합니다. 코드. 테스트 : 코드의 정확성과 신뢰성을 보장하기 위해 단위 및 통합 테스트를 작성하십시오.
    • versioning :
    • 시간에 걸쳐 API의 변경 사항을 관리하기 위해 API 버전을 구현하는 것을 고려하십시오. 피하는 함정에는 다음이 포함됩니다 :
    • 입력 유효성 검증 불충분 : 사용자 입력을 검증하지 못하면 보안 취약점 (예 : SQL 주입) 및 데이터 불일치로 이어질 수 있습니다. 오류 처리를 무시합니다. 항상 잠재적 인 예외를 처리하고 의미있는 오류 메시지를 반환합니다.
  2. 컨트롤러의 비즈니스 로직 혼합 :
  3. 컨트롤러의 직접 데이터베이스 액세스 : 컨트롤러는 데이터베이스와 직접 상호 작용해서는 안됩니다. 항상 서비스 및 저장소 계층을 사용하십시오. 지나치게 복잡한 컨트롤러 :
  4. 컨트롤러를 기울어지고 집중하십시오. 크고 복잡한 컨트롤러는 유지 관리하고 테스트하기가 어렵습니다.
  5. 테스트 부족 : 테스트가 불충분하면 버그와 회귀가 발생할 수 있습니다. 컨트롤러 및 리포지토리에 대한 서비스 및 통합 테스트에 대한 단위 테스트를 작성하십시오. Pagination 및 필터링 무시 : 대형 데이터 세트의 경우 Pagination 및 필터링을 구현하여 성능 및 사용자 경험을 향상시킵니다. 모든 요청에 ​​대해 전체 데이터 세트를 검색하지 마십시오

위 내용은 Nestjs Crud 작업 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.