[React] 블로그 만들기 2 - 데이터 생성, 조회, 삭제, 수정 기능 구현

2022. 3. 14. 14:24·공부하기/React

다음은 책 리액트를 다루는 기술을 읽고 공부한 내용을 바탕으로 작성된 글입니다.


 

1. 데이터 생성 : 블로그 포스트 작성

- src/api/posts/posts.ctrl.js

import Post from '../../models/post';

/*
POST /api/posts
{
  title: "제목",
  body: "내용",
  tags: ['태그1','태그2']
}
*/
export const write = async (ctx) => {
  const {title, body, tags} = ctx.request.body;
  const post = new Post ({
    title,
    body,
    tags,
  });

  try{
    await post.save();
    ctx.body = post;
  } catch(e) {
    ctx.throw(500,e);
  }
};
인스턴스를 만들어 save() 함수를 실행시키면 데이터베이스에 저장된다.

이 함수의 반환 값은 Promise로 async/await 문법으로 데이터베이스에 저장을 완료할 때까지 await를 사용하여 대기할 수 있다.

 

- Postman

POST 테스팅 결과

 

- MongoDB

MongoDB POST 업로드 테스트 

 

MongoDB 데이터베이스에 성공적으로 업로드 됐음을 확인했다.

 

 

2. 데이터 조회

 

- src/api/posts/posts.ctrl.js

/*
GET /api/posts
*/
export const list = async (ctx) => {
  try {
    const posts = await Post.find().exec();
    ctx.body = posts;
  } catch (e) {
    ctx.throw(500, e);
  }
};

 

데이터를 조회할 때는 모델 인스턴스의 find() 함수를 사용한다.

find() 함수를 호출한 후에는 exec()를 붙여 주어야 서버에 쿼리를 요청한다고 한다.

 

😶 exec() ❓

책 속의 위 문장이 잘 이해가 가지않아 mongoose의 exec 메서드에 대해 더 구글링해보았다.

쿼리 인스턴스 함수 중, 콜백 함수를 넣지 않아도 프로미스를 반환하는 함수는 create(), save(), 등 일부에 한한다.

따라서 나머지의 대부분의 함수에는 마지막 매개변수로 콜백함수를 넣어주거나, 마지막에 exec() 함수를 붙여 쿼리를 최종 실행시킬 수 있다고 한다.

 

따라서 다음의 코드는 적절하지 않은 코드이며, Promise를 반환하지 않는다.

const post = await Post.findById(id);

 

 

 

- Postman

데이터 조회 GET 테스팅 결과 

Postman으로 테스팅 결과 모든 게시글이 조회되는것을 확인했다.

 

 

3. 특정 포스트 조회

- src/api/posts/post.ctrl.js

/*
GET /api/posts/:id
*/
export const read = async (ctx) => {
  const {id} = ctx.params;
  try{
    const post = await Post.findById(id).exec();
    if(!post) {
      ctx.status = 404; // Not Found
      return;
    }
    ctx.body = post;
  } catch(e) {
    ctx.throw(500,e);
  }
};
특정 id를 가진 데이터를 조회할 때는 findById() 함수를 사용한다.

- Postman

특정 포스트 조회 GET 테스팅 결과

Postman으로 테스팅한 결과, 성공적으로 해당 id의 포스트가 조회되는 것을 확인했다.

 

 

4. 데이터 삭제

 

데이터를 삭제할 때는 여러 종류의 함수를 사용할 수 있다.

remove() : 특정 조건을 만족하는 데이터를 모두 지운다.
findByIdAndRemove() : id를 찾아서 지운다.
findOneAndRemove() : 특정 조건을 만족하는 데이터 하나를 찾아서 지운다.

 

- src/api/posts/posts.ctrl.js

/*
DELETE /api/posts/:id
*/
export const remove = async (ctx) => {
  const { id } = ctx.params;
  try {
    await Post.findByIdAndRemove(id).exec();
    ctx.status = 204; // No content , 성공했지만 응답할 데이터는 없음
  } catch (e) {
    ctx.throw(500, e);
  }
};

findByIdAndRemove() 함수를 사용했다.

 

 

- Postman

 

DELETE 테스팅 

 

- MongoDB

 

DELETE 테스팅 결과

 

테스팅 결과 성공적으로 해당 id의 POST가 삭제됐음을 확인했다.

 

5. 데이터 수정

데이터를 업데이트 할 때는 findByIdAndUpdate() 함수를 사용한다.
이 함수를 사용할 때는 세 가지 파라미터를 넣어주어야 한다.
첫 번째에는 id, 두 번째에는 업데이트 내용, 세 번째에는 업데이트의 옵션이다.

 

- src/api/posts/posts.ctrl.js

 

/*
PATCH /api/posts/:id
{
  title: '수정',
  body: '수정 내용',
  tags : ['수정','태그']
}
*/
export const update = async (ctx) => {
  const { id } = ctx.params;

  try {
    const post = await Post.findByIdAndUpdate(id, ctx.request.body, {
      new: true,
      // 업데이트된 데이터를 반환
      // false일 때는 업데이트 되기 전의 데이터를 반환한다.
    }).exec();
    if (!post) {
      ctx.status = 404; // Not Found
      return;
    }
    ctx.body = post;
  } catch (e) {
    ctx.throw(500, e);
  }
};

 

- Postman

PATCH 테스팅 

 

- MongoDB

PATCH 테스팅 결과

 

테스팅 결과 해당 id의 title이 성공적으로 수정되었음을 확인했다.

 

저작자표시 (새창열림)

'공부하기 > React' 카테고리의 다른 글

[React] 블로그 만들기 4 - Request Body 검증  (0) 2022.03.14
[React] 블로그 만들기 3 - 요청 검증 (id 검증)  (0) 2022.03.14
[React] 블로그 만들기 1 - MongoDB를 이용하여 스키마, 모델 만들기  (1) 2022.03.11
[React] Koa를 이용한 개발 / 라우터 모듈화 / 컨트롤러 파일 모듈화  (3) 2022.03.09
[React] Koa를 이용한 개발 / Koa, koa-router, nodemon  (2) 2022.03.07
'공부하기/React' 카테고리의 다른 글
  • [React] 블로그 만들기 4 - Request Body 검증
  • [React] 블로그 만들기 3 - 요청 검증 (id 검증)
  • [React] 블로그 만들기 1 - MongoDB를 이용하여 스키마, 모델 만들기
  • [React] Koa를 이용한 개발 / 라우터 모듈화 / 컨트롤러 파일 모듈화
다섯자두
다섯자두
All I need is 💻 , ☕️ and a dash of luck
  • 다섯자두
    subbni
    다섯자두
  • 전체
    오늘
    어제
    • 전체 글 (88) N
      • 개발 이야기 (0)
      • 만들어보기 (17)
        • FromBookToBook (5)
        • Spring (5)
        • Node.js & React (3)
        • TroubleShooting (4)
      • 공부하기 (71) N
        • Network (3)
        • Cloud (1)
        • Database (5)
        • Java (13)
        • Javascript (0)
        • Spring (9)
        • React (18)
        • Algorithm (8)
        • 자료구조 (7)
        • ETC (7) N
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • velog
  • 공지사항

  • 인기 글

  • 태그

    Spring
    pdf 자동 다운로드
    서명알고리즘
    Til
    티스토리챌린지
    실시간 데이터 전송 기술
    최단거리
    SQS
    JPA
    mysql
    Express
    프로젝트
    SSE
    outbox
    알림 기능
    redis
    java
    로그인
    Database
    springboot
    알고리즘
    자료구조
    aws
    SQL
    오블완
    HTTP
    재시도 로직
    network
    pdf 프리뷰 실패
    outbox 패턴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
다섯자두
[React] 블로그 만들기 2 - 데이터 생성, 조회, 삭제, 수정 기능 구현
상단으로

티스토리툴바