blog

블로그 관리 시스템 백엔드 챕터: 태그 페이지 인터페이스 추가, 삭제, 변경 및 확인을 달성하기 위한 vue3 + Nest

"이 장은 주로 블로그 태그 인터페이스를 추가, 삭제, 변경 및 확인하기 위해 작성되었지만 다음 글에서 블로그 추가 패드를 만들기 위해 태그를 부모 태그와 자식 태그로 구분합니다....

Oct 3, 2025 · 4 min. read
シェア

"이 장에서는 태그를 추가, 삭제 및 변경하기 위한 블로그 태그 인터페이스 작성에 중점을 두며, 태그가 상위 태그와 하위 태그로 구분되는 블로그에 다음에 추가할 내용을 작성할 수 있는 기반을 닦습니다."

태그 모듈 만들기

bash
nest g res tag

또한 REST API를 선택하고 크러드를 생성합니다.

태그된 엔터티 추가하기

ts
import { Base } from 'libs/Entities/base.entity'; import { Column, Entity, ManyToMany, ManyToOne } from 'typeorm'; @Entity('tag') export class Tag extends Base { @Column({ type: 'varchar', comment: '태그 이름', }) name: string; @ManyToOne((type) => Tag, (tag) => tag.superiors) superiorsid: Tag; @ManyToMany((type) => Tag, (tag) => tag.superiorsid) superiors: Tag[]; @Column() grade: string; }

다시 시작하면 데이터베이스가 tsg 테이블을 생성한 것을 볼 수 있습니다.

인터페이스 만들기 추가

ts
constructor(@InjectRepository(Tag) private tagRepository: Repository<Tag>) {} async create(createTagDto: CreateTagDto) { return await this”.tagRepository.save(createTagDto); }

그런 다음 apifox를 열어 인터페이스 테스트를 진행합니다.

네, 문제 없습니다.

라벨 쿼리 인터페이스

먼저, tag.controller.ts를 수정하여 입력 매개변수를 추가합니다.

tag.service.ts를 수정하여 인바운드 매개변수 및 페이징을 설정합니다.

ts
interface SearchType { // 검색 기준 search: any; pageNo: number; pageSize: number; } Apiresult = new ApiresultService(); async findAll(body: SearchType) { const { pageNo, pageSize, search } = body; const condition: Record<string, any> = {}; // 퍼지 쿼리 설정의 경우 const skipCount = (pageNo - 1) * pageSize; // 건너뛸 항목 수를 계산하는 페이지 매김 쿼리 if (search && search.name) { const { name } = search; condition.name = Like(`%${name}%`); // 퍼지 쿼리 } condition.grade = 1; // 보조 정보이므로 필터링하세요. const [list, total] = await this”.tagRepository .createQueryBuilder('entity') // 테이블 별칭 설정 .leftJoinAndSelect('entity.superiors', 'children') .where(condition) // 쿼리 조건 설정 .skip(skipCount) .take(pageSize) .getManyAndCount(); return { ...this”.Apiresult.MESSAGE(200, '쿼리 성공', list), total, }; }

여기에 몇 가지 데이터를 추가했으며, 다음에는 apifox를 사용하여 쿼리를 테스트해 보겠습니다.

페이징 쿼리에 문제가 없는 경우 이름 조건 쿼리를 테스트합니다.

조건부 퍼지 쿼리는 괜찮습니다.

ts
async update(body) { if (!body.id) return this”.Apiresult.MESSAGE(500, '누락된 아이디'); const data = await this”.tagRepository.update(body.id, body); console.log(data); if (data.affected > 0) { return this”.Apiresult.MESSAGE(200, '성공적으로 수정되었습니다'); } return this”.Apiresult.MESSAGE(500, '수정에 실패했습니다. 입력 매개변수를 확인하세요'); }

추가 및 삭제도 마찬가지입니다.

ts
async remove(body) { if (!body.id) return this”.Apiresult.MESSAGE(500, '누락된 아이디'); const data = await this”.tagRepository.delete(body.id); if (data.affected > 0) { return this”.Apiresult.MESSAGE(200, '삭제 성공'); } return this”.Apiresult.MESSAGE(500, '삭제에 실패했습니다, 입력 매개변수를 확인하세요'); }

테스트해 보세요.

Read next

킹베이스 데이터베이스의 KES 스토리지 구조 소개

KES 스토리지 구조 소개\n키워드:\n\n1. KES 논리 구조\nKES 데이터베이스 논리 구조는 데이터베이스 클러스터, 데이터베이스, 스키마, 데이터 오브젝트로 나눌 수 있습니다.\n스키마는 데이터베이스 객체의 집합이고, 데이터 오브젝트는 데이터베이스 데이터를 직접 참조하는 논리 구조입니다.\n

Oct 3, 2025 · 5 min read