NestJS - CUD 구현하기

껌뻑이·2021년 7월 30일
0

NestJS

목록 보기
5/5
post-thumbnail

NestJS - CUD 구현하기

지난 시간에는 R를 맞고있는 Read까지 만들었다.

오늘은 Create, Update, Delete를 구현해보자

REST API

우리의 restAPI예상 주소이다.

addressinfohttp method
/users/create새로운 user 생성post
/users/1id가 1번인 user 수정fetch
/users/1id가 1번인 user 삭제delete

그럼 구현해 보자

Create

users.controller.ts

...

@Post('/create')
  createOne(@Body() newUser: data) {
    return this.usersService.createOne(newUser);
  }

...

update를 하려면 http method중 post를 사용하여 내용(객체)를 보내야 한다.
보내는 내용은 @Body()를 사용해 가져오고 그 내용을 원하는 변수명(newUser)로 설정하고 service에 보내준다. 주소는 users/create로 설정했다.

user.service.ts

createOne(newUser: data): data[] {
    datas.push(newUser);
    return datas;
  }

실제 로직을 담당하는 service에서는 받은 객체를 fakeDB인 datas에 push해주면 된다.
그리고 추가된 datas를 리턴해 주면 create는 끝이다.!

Delete

users.controller.ts

 @Delete('/:id')
  removeOne(@Param('id') id: number) {
    return this.usersService.deleteOne(id);
  }

remove는 http method중 delete를 사용한다.
파라미터의 id값을 받아 service에 넘겨줘서 알맞은 user가 삭제되도록 한다.

user.service.ts

removeOne(id: number): data[] {
    const delUser = datas.findIndex((user) => user.id === +id);

    if (delUser !== -1) datas.splice(delUser, 1);

    return datas;
  }

받은 id값을 통해 datas에 알맞은 user가 있는지 fundIndex()를 통해 확인한다.
파라미터로 들어온 값은 string이기 때문에 +를 통해 number로 형변환이 필요하다.

findIndex()는 알맞는 값이 없으면 -1를 반환하기 때문에 return -1이 아닐때만 splice를 사용하여 해당 인덱스번호의 user를 삭제해 준다.

그리고 현재 datas값을 리턴해준다.

Update

user.controller.ts

@Patch('/:id')
  updateOne(@Param('id') id: number, @Body() newUser: data) {
    return this.usersService.updateOne(id, newUser);
  }

update는 http method에서 patch를 사용한다.
수정할 user의 id와 수정할 내용을 값이 보내준다.

nest에서는 내용을 @Body()로 받을 수 있다.
내용을 원하는 이름으로 받은 뒤 service에게 id와 내용을 값이 보내주자.

user.service.ts

 updateOne(id: number, newUser: data): data[] {
    const editUser = datas.findIndex((user) => user.id === +id);

    if (editUser !== -1) {
      datas.splice(editUser, 1);
      datas.push({ id: Number(id), ...newUser });
    }

    return datas;
  }

번저 id로 알맞은 user있는지 확인하고 있으면 삭제 후 우리가 받은 내용을 다시 넣어준다.
원래 진짜 DB로 하면 간단한 API가 있겠지만 우리는 fakeDB를 이용하고 있어서 이렇다...

그리고 현재 datas값을 리턴해준다.

테스트 해보기

Insomnia를 이용해서 테스트해보자

서버 실행

먼저 로컬에서 서버를 실행해주자

npm run start:dev

Insomnia에서 테스트

Create, post

원래 홍길동과 이순신뿐이었는데 우리가 보낸 내용에 맞게 강감찬이 생겨서 리턴을 해주었다.

Update, fetch

파라미터로 2와 원하는 내용을 주면 id가 2번인 user가 우리가 보낸 내용(name:"임꺽정")에 맞게 변화된것을 볼 수 있다.

Delete, delete

delete method로 원하는 id값을 파라미터로 주면 알맞은 id값의 user, 즉 임꺽정이 삭제된 것을 볼 수 있다.

결론

지금까지 한것은 제대로된 DB도 없이 CRUD만 구현한 것이다.
여기서 이제 더 나아가 예외처리라든지 DTO를 만들다는지 이것저것 해볼 예정이다.

0개의 댓글