본문 바로가기

카테고리 없음

Reactmongoose를 이용한 MongoDB 연동 실습 4 데이터 삭제 수정

데이터를 삭제하는 방법은 여러가지 입니다.

 remove(): 특정 조건을 만족하는 데이터를 모두 지웁니다.

 findByIdAndRemove(): id를 찾아서 지웁니다.

 findOneAndRemove(): 특정 조건을 만족하는 데이터 하나를 찾아서 제거합니다.

 

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);
  }
};

 

삭제 이후 다시 요청 시 에러 발생

 

데이터 수정

 findByIdAndUpdate() 함수를 이용하여 데이터를 업데이트 합니다.

 findByIdAndUpdate(id,업데이트 내용, 업데이트 옵션) 

 

 

검증

id가 올바른 Objectid 인지 확인 할 필요가 있는데 이때 사용 할 수 있는 것이 isValid 이다

이때 id를 사용하는 함수는 읽기 삭제 수정 인데 일일히 코드에 검증 코드를 넣는 것은 비효율 적이니

미들웨어로 만들어서 넣어줍니다.

 

import mongoose from 'mongoose';

const { ObjectId } = mongoose.Types;

export const checkObjectId = (ctx, next) => {
  const { id } = ctx.params;
  if (!ObjectId.isValid(id)) {
    ctx.status = 400; // Bad Request
    return;
  }
  return next();
};

그 후 index에 미들웨어를 추가해서 동작하게 만들면 됩니다.

 

posts.get('/:id', postsCtrl.checkObjectId, postsCtrl.read);
posts.delete('/:id', postsCtrl.checkObjectId, postsCtrl.remove);
posts.patch('/:id', postsCtrl.checkObjectId, postsCtrl.update);

 

Request Body 검증

- 반드시 모델의 인스턴스 객체는 모델에 있는 스키마 필드 내용을 전달받아야한다.

만약 클라이언트에서 이걸 생략하면 에러 처리를 하지 않으면 빈 값이 저장되게 된다.

 

이걸 하게 해주는 라이브러리 Joi

 

$ yarn add joi