[Express] patch와 delete 만들기

적자생존·2023년 1월 3일
1

Node

목록 보기
8/17

1. patch 라우터 추가하기

컨트롤러 파일을 가서 patch함수를 만들어준다.

const DUMMY_DATA = [
  {
    id: "p1",
    title : "더미입니다.",
    creator : "u1"
  }
]
// controller

const update = (req, res, next) => {
 const {title} = req.body;
 const findId = req.params.pid
 const updatedData = {...DUMMY_DATA.find((p) => p.id === findId))}
 const index = DUMMY_DATA.findIndex((p) => p.id === findId))
 updatedData.title = title
  
  DUMMY_DATA[index] = updatedData
  res.status(200).json({data : updatedData})
}

// routes

router.get("/:pid", 컨트롤러.update)

우선 언제나 마찬가지로 params에서 아이디를 추출해 온다.

그리고 바로 데이터를 수정하는 것이 아닌 복제본을 만들어 덮어 씌워줘야 한다.

이유는 참조값과 원시값의 차이인데 이를 알기 위해서는 복잡하니 간략하게 말하면

참조값의 경우 배열과 객체가 있는데 각각의 주소가 따로 생성된다.

바로 원본을 수정해버리면 예기치 못한 에러가 발생할 수 있으니 스프레드를 이용해서 얕은 복사를 한 후 복사한 객체의 값을 변경 이후 원본에 덮어씌우는 방법을 활용했다.

참고 : https://velog.io/@yukyung/Spread-Operator%EB%8A%94-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%9D%BC%EA%B9%8C-%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%9D%BC%EA%B9%8C

아무튼 이후 얕은 복사를 이용해 원본을 해치지 않고 복제를 변경 후 원본에서 pid를 가지고 있는 데이터의 index값을 가져와 복제된 데이터로 덮어 준다.

이후 상태값을 200으로 확인하고 필요한 메시지를 보내준다.

2. delete 구현하기

delete의 경우는 매우 쉽다

const delete = (req, res, next) => {
 const findId = req.params.pid 
 DUMMY_DATA = DUMMY_DATA.filter((p) => p.id !== findId)
 res.status(200).json({message : "삭제완료"})
}

이는 params의 넘어온 아이디를 추출해서 데이터를 필터링 해서 반환해주면 된다.

profile
적는 자만이 생존한다.

0개의 댓글