본문 바로가기
Research/Node.js

Express.js_CRUD API

by RIEM 2023. 3. 24.
728x90

Express.js의 CRUD API를 간단하게 구현한 코드. 미들웨어는 덤. DB 관련 코드는 임시로 작성한 것이기에 전체 구조 정도만 파악하기 위해 작성한 글

// cats/cats.router.ts

// app 객채가 구분되는 것을 이어줄 필요가 있음
import { Router } from 'express';

// router 인스턴스 생성
const router = Router();

// READ 데이터 조회
router.get('/cats', (req, res) => {
  try {
    const cats = { data: 'data example' };
    // throw new Error('db connect error');

    res.status(200).send({
      success: true,
      data: {
        cats,
      },
    });
  } catch (error) {
    res.send({
      succes: false,
      error: error.message,
    });
  }
});

// READ 특정 데이터 조회
// 동적 라우팅 <= :id 파라미터를 활용
router.get('/cats/:id', (req, res) => {
  try {
    const params = req.params;
    console.log(params);
    const cats = Cat.find((cat) => {
      return cat.id === params.id;
    })

    const cats = { data: 'data example' };

    res.status(200).send({
      success: true,
      data: {
        cats,
      },
    });
  } catch (error) {
    res.send({
      succes: false,
      error: error.message,
    });
  }
});

// CREATE 데이터 생성
router.post('/cats', (req, res) => {
  try {
    const data = req.body; // json 바디값은 미들웨어 필요
    console.log(data);
    // 데이터 DB에 저장하는 create코드 생성할것
    res.status(200).send({
      success: true,
      data: {},
    });
  } catch (error) {
    res.status(400).send({
      success: false,
      error: error.message,
    });
  }
});

// Update PUT
router.put('/cats/:id', (req, res) => {
  try {
    const params = req.params;
    const body = req.body;
    let result;
    cats.forEach((cat) => {
      if (cat.id === params.id) {
        cat = body;
        result = cat;
      }
    })

    const cats = { data: 'data example' };

    res.status(200).send({
      success: true,
      data: {
        cats,
      },
    });
  } catch (error) {
    res.send({
      succes: false,
      error: error.message,
    });
  }
})

// Update PATCH(partial update)
// Patch는 구조분해 할당으로 누락 데이터 보완
try {
  const params = req.params;
  const body = req.body;
  let result;
  cats.forEach((cat) => {
    if (cat.id === params.id) {
      cat = { ...cat, ...body }
      result = cat;
    }
  })
  const cats = { data: 'data example' };

  res.status(200).send({
    success: true,
    data: {
      cats,
    },
  });
} catch (error) {
  res.send({
    succes: false,
    error: error.message,
  });
}

// Delete
router.delete('/cats/:id', (req, res) => {
  try {
    const params = req.params;
    // 데이터베이스에서 id와 다른 값들만 필터링. id에 해당하는 정보는 삭제
    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
    })
  }
})

// router 인스턴스 등록
export default router;
728x90

댓글