Search

#009 #고양이 데이터 update/delete api

 라우터 껍데기 생성

 Put 메소드

//* UPDATE 고양이 데이터 업데이트 -> PUT router.put("/cats/:id", (req, res) => { try { const params = req.params; const body = req.body; let result; Cat.forEach((cat) => { if (cat.id === params.id) { cat = body; result = cat; } }); res.status(200).send({ success: true, data: { cat: result, }, }); } catch (error) { res.status(400).send({ success: false, error: (error as Error).message, }); } });
JavaScript
복사
req.params : 요청 데이터를 꺼낸다. Cat.forEach((cat) = > {}); : id가 동일한 고양이를 찾는 로직
업데이트 로직 정상 작동 확인

 Patch 메소드

//* UPDATE 고양이 데이터 부분적으로 업데이트 -> PATCH router.patch("/cats/:id", (req, res) => { try { const params = req.params; const body = req.body; let result; Cat.forEach((cat) => { if (cat.id === params.id) { cat = {...cat, ...body}; result = cat; } }); res.status(200).send({ success: true, data: { cat: result, }, }); } catch (error) { res.status(400).send({ success: false, error: (error as Error).message, }); } });
JavaScript
복사
여기서 주의깊게 보아야할 것은 전개연산자를 사용한 업데이트이다.

 전개연산자를 활용한 배열 / 객체 업데이트

전개 연산자는 배열이나 객체의 내용을 쉽게 펼칠 수 있도록 도와주는 도구이다. 전개 연산자는 배열과 객체에서 다르게 동작한다.
1.
배열에서의 전개 연산자
배열에서 전개 연산자는 배열의 요소들을 개별적으로 펼친다.
const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const combined = [...arr1, ...arr2]; // [1, 2, 3, 4, 5, 6]
JavaScript
복사
2.
배열 복사
전개 연산자는 배열을 간단히 복사할 수 있고, 이는 독립적인 배열이 된다. (깊은 복사)
const arr1 = [1, 2, 3]; const arr2 = [...arr1]; // [1, 2, 3]
JavaScript
복사
3.
객체에서의 전개 연산자
객체에서 전개 연산자는 객체의 속성들을 개별적으로 펼친다.
const obj1 = { a: 1, b: 2 }; const obj2 = { c: 3, d: 4 }; const combined = { ...obj1, ...obj2 }; // { a: 1, b: 2, c: 3, d: 4 }
JavaScript
복사
4.
객체 복사
전개 연산자를 사용하면 객체를 간단히 복사할 수 있다.
const obj1 = { a: 1, b: 2 }; const obj2 = { ...obj1 }; // { a: 1, b: 2 }
JavaScript
복사
5.
객체 업데이트
여기서 b의 값이 2에서 3으로 업데이트 되었고, 새로운 속성이 추가 되었다. 결국 원본 객체를 수정하는 것이 아니라 새로운 객체를 생성한 것이다.
const obj = { a: 1, b: 2 }; const updated = { ...obj, b: 3, c: 4 }; // { a: 1, b: 3, c: 4 }
JavaScript
복사

 테스트 확인

name 값만 날렸는데, 다른 것들은 그대로 유지하고 name 밸류만 업데이트 되었다.

 Delete 메소드

//* DELETE 고양이 데이터 삭제 -> DELETE router.delete("/cats/:id", (req, res) => { try { const params = req.params; const newCat = Cat.filter((cat)=> cat.id !== params.id); res.status(200).send({ success: true, data: newCat, }) } catch (error) { // TODO: handle exception res.status(400).send({ success: false, error: (error as Error).message, }) } });
JavaScript
복사
Cat.filter를 사용해서 아이디가 같은 고양이를 필터링 하고 같지 않은 고양이들만 배열로 만들어 newCat이 되었다.
성공적으로 데이터가 사라졌다.