Router를 분리할거야

위와 같이 route.ts 를 하나 만든 후
여기에 API 에 대한 애들은 그대로 옮겨줌
import { Cat, CatType } from './cats/cats.model';
//* READ 특정 고양이 데이터 조회
app.get('/cats/:id', (req, res) => {
try {
const params = req.params;
console.log(params);
const cats = Cat.find(cat => {
return cat.id == params.id;
});
res.status(200).send({
success: true,
data: {
cats,
},
});
} catch (error) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
//* CREATE 새로운 고양이 추가 API
app.post('/cats', (req, res) => {
try {
const data = req.body;
console.log(data);
res.status(200).send({
success: true,
data: {data},
});
} catch (error) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
정리하면 위와 같다.
근데 그러면 문제가 되는 것이 app 이라고 하는 애가 express를 통해 서버로 만들어주는 인스턴스인데
얘를 가져오지 못한다.
import { Router } from 'express';
const router = Router();
위를 추가해줌으로써,
을 사용하면 앱에서 Router 역할을 할 수 있다.
그리고 app.ts 에서
```js
import catsRouter from './cats/cats.route';
app.use(catsRouter);
만 추가해주면
해당 라우터에 등록한 애들을 사용할 수 있다.
UPDATE 를 구현하자
고양이 데이터 업데이트
//* 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 = body;
result = cat;
}
});
res.status(200).send({
success: true,
data: {
cat: result,
},
});
} catch (error) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
위의 url을 patch하여 데이터를 넣으면
```js
{
"name" : "yellow",
"age": 3,
"species": "Sharm",
"isCute": true,
"friends": []
}
해당 데이터 업데이트 결과를 알 수 있다.
고양이 데이터 부분적인 업데이트
Cat.forEach((cat) => {
if (cat.id === params.id) {
cat = { ...cat, ...body };
result = cat;
}
});
위와 동일하면서 forEach 안에 cat을 업데이트 해주는 부분만 통째로 넣는 것이 아니라 spread 문법으로 넣는다고 보면 된다.
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) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
해당 데이터가 아닌 애들만 뽑아내는 filter를 사용하여 만듬