Router를 분리할거야

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를 사용하여 만듬