티스토리 뷰
[nestjs] 3. nestjs 환경에서 기본적인 CRUD(Create Read Update Delete) 완성하기
개발자 고포고 2021. 11. 14. 23:42[nestjs] 3. nestjs 환경에서 기본적인 CRUD(Create Read Update Delete) 완성하기
지난시간에 기본적인 TypeORM을 활용하여 데이터베이스연결까지 완성하였으니, 기본적인 CRUD(Create Read Update Delete)를 완성해보자.
여기서 테스트 프로젝트에서는 당장은 Update기능을 사용하진 않으니 Update기능을 제외하고 사용해보겠다.
[test.module.ts]
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Photo } from './entities/photo.entity';
import { TestController } from './test.controller';
import { TestService } from './test.service';
@Module({
imports: [TypeOrmModule.forFeature([Photo])],
providers: [TestService],
controllers: [TestController],
})
export class TestModule {}
일단 providers에 Service, controllers에 Controller를 넣어주자
[test.entity.ts]
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 500 })
name: string;
@Column({ nullable: true })
description: string;
}
조금 복잡했던 entity를 다음과 같이 간소화하였다.
[test.dto.ts]
export interface ICreatePhotoDto {
name: string;
description?: string;
}
export interface IOutputDto {
ok: boolean;
error?: string;
}
@Post 시 생성 할 형식 ICreatePhotoDto와
@Delete 및 @Put등에서 사용할 IOutputDto를 생성하였다.
[test.service.ts]
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { ICreatePhotoDto, IOutputDto } from './dtos/photo.dto.interface';
import { Photo } from './entities/photo.entity';
@Injectable()
export class TestService {
constructor(
@InjectRepository(Photo)
private readonly repository: Repository<Photo>,
) {}
async create(createTodoDto: ICreatePhotoDto) {
return this.repository.save(createTodoDto);
}
get(): Promise<Photo[]> {
return this.repository.find();
}
getOne(id: number): Promise<Photo> {
return this.repository.findOne({ id });
}
async getName(name: string): Promise<Photo> {
return this.repository.findOne({ name: name });
}
async delete(id: number): Promise<IOutputDto> {
try {
console.log(id);
const result = await this.repository.findOne({ id });
console.log(result);
if (result) {
this.repository.delete({ id });
return {
ok: true,
};
} else {
return {
ok: false,
error: 'already deleted',
};
}
} catch (e) {
return {
ok: false,
error: e,
};
}
}
}
[test.controller.ts]
import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common';
import { ICreatePhotoDto, IOutputDto } from './dtos/photo.dto.interface';
import { Photo } from './entities/photo.entity';
import { TestService } from './test.service';
@Controller('test')
export class TestController {
constructor(private readonly testService: TestService) {}
@Post()
async create(@Body() createPhotoDto: ICreatePhotoDto) {
const returnValue = await this.testService.create(createPhotoDto);
return returnValue;
}
@Get()
getTest(): Promise<Photo[]> {
return this.testService.get();
}
@Get('/:id')
getTestOne(@Param('id') id: number): Promise<Photo> {
return this.testService.getOne(id);
}
@Get('/name/:name')
getTestOneName(@Param('name') name: string): Promise<Photo> {
return this.testService.getName(name);
}
@Delete('/:id')
delete(@Param('id') id: number): Promise<IOutputDto> {
return this.testService.delete(id);
}
}
기본적인 CRUD과정이라 특별한 설명은 생략하겠다.
추가적인 설명이라면
-Promise, async, await는 데이터베이스 처리를 위한 비동기 처리이다.
-IOutputDto는 만들지 않아도 상관없지만, 예외 발생시 설명을 위한 error string 변수를 추가한 것이다.
[github commit]
https://github.com/gofogo2/nest-js-api/commit/2d0bf9daa2b692e7487a1097a65917c611df37e4
[소스코드]
https://github.com/gofogo2/nest-js-api.git
#nestjs #typescript #javascript #js #ts #api #controller #service #typeorm #database #mysql #postgres #sql #nestjs to db #crud #get #put #post #delete #api #api기본적인 로직
'nest api 서버 개발 프로젝트' 카테고리의 다른 글
[nestjs] 5. api를 위한 기본 구성 추가 싸이클(db/controller/module/service) (0) | 2021.11.15 |
---|---|
[nestjs] 4. nestjs환경에서 설정파일 config로 빼기(Joi, config, cross-env) (0) | 2021.11.15 |
[nestjs] 2. nestjs환경에 typeorm을 적용하여 데이터베이스 연결하기 (0) | 2021.11.14 |
[nestjs] 1. testController / testService 생성 및 helloworld (0) | 2021.11.14 |
[nestjs] 0. 프로젝트 생성 (0) | 2021.11.14 |