라우터 껍데기 생성
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이 되었다.
성공적으로 데이터가 사라졌다.