본문 바로가기
웹 프로젝트/👨‍👨‍👧‍👧소셜 가계부

[React/Node.js/Express/MongoDB] 소셜 가계부 프로젝트 구현 일지: 백엔드 구현하기 (입출금 내역 - POST, PATCH, DELETE 요청)

by 청량리 물냉면 2024. 1. 27.
반응형

🚧 사전 작업

 

uuid 라이브러리 설치
고유 식별자(id)를 생성해주는 서드파티 라이브러리

npm install --save uuid

 

 

body-parser 패키지 설치

request.body에 있는 데이터에 접근하기 위해 사용하는 구문 분석 패키지

 

app.js

// 본문을 먼저 파싱 -> 본문의 json 데이터를 추출해서 객체나 배열 같이 일반적인 js 구조로 변환
app.use(bodyParser.json());

 

* body-parser ???

 

Express body-parser middleware

body-parser Node.js body parsing middleware. Parse incoming request bodies in a middleware before your handlers, available under the req.body property. Note As req.body’s shape is based on user-controlled input, all properties and values in this object a

expressjs.com

 

[node.js] body-parser을 정확히 알자

express를 사용하면 보통 아래와 같이 시작을 한다.보통 body-parser를 설명할때 'request.body에 있는 데...

blog.naver.com

 

express 미들웨어 body-parser 모듈

서버 공부를 시작하며 요청에 대한 응답을 주는 과제를 하는 중에 node.js 의 모듈 bodyParser의 존재를 알게 되었다. bodyParser 모듈 없이는 post, put 요청 메소드의 request.body를 읽어올 수 없어 일단 사

velog.io

 

 

🎁 POST (입출금 내역 추가)

transactions-routes.js

router.post("/", transactionsControllers.createTransaction);

router.post는 expess의 라우팅 메소드이다. 

post 요청을 진행할 url라우트 일치 시에 실행되는 함수를 작성해 준다.

 

transactions-controller.js

const createTransaction = (req, res, next) => {
  const { uid, category, title, amount, transaction_type, memo } = req.body;
  const createdTransaction = {
    tid: uuid(),
    uid,
    category,
    title,
    amount,
    transaction_type,
    memo,
  };

  DUMMY_TRANSACTION.push(createdTransaction);

  res.status(201).json({ transaction: createdTransaction });
};

exports.createTransaction = createTransaction;

정상적으로 가계부가 게시되었는지 살펴보려면 post man을 이용해 직접 request를 날려보면 된다.

정상적으로 잘 응답받고 있다.

tid로는 uuid()로 생성한 id값이 들어가 있는 것을 확인할 수 있다.

 

 

🎨 PATCH (입출금 내역 수정)

transactions-routes.js

router.patch("/:tid", transactionsControllers.updateTransaction);

특정 id를 가진 입출금 내역을 수정한다. 

 

transactions-controller.js

const updateTransaction = (req, res, next) => {
  const { category, title, amount, transaction_type, memo } = req.body;
  const transactionId = req.params.tid;

  const updatedTransaction = {
    ...DUMMY_TRANSACTION.find((t) => t.tid === transactionId),
  };
  const transactionIndex = DUMMY_TRANSACTION.findIndex(
    (t) => t.tid === transactionId
  );
  updatedTransaction.category = category;
  updatedTransaction.title = title;
  updatedTransaction.amount = amount;
  updatedTransaction.transaction_type = transaction_type;
  updatedTransaction.memo = memo;

  DUMMY_TRANSACTION[transactionIndex] = updatedTransaction;

  res.status(200).json({ transaction: updatedTransaction });
};

exports.updateTransaction = updateTransaction;

우선 특정 id를 가진 입출금 내역을 찾아온다.

이후에 찾아온 입출금 내역의 내용을 수정하여 저장해 준다.

 

 

🗑 PATCH (입출금 내역 삭제)

transactions-routes.js

router.delete("/:tid", transactionsControllers.deleteTransaction);

특정 id를 가진 입출금 내역을 삭제한다. 

 

transactions-controller.js

const deleteTransaction = (req, res, next) => {
  const transactionId = req.params.tid;
  DUMMY_TRANSACTION = DUMMY_TRANSACTION.filter((t) => t.tid !== transactionId);

  res.status(200).json({ message: "삭제 완료", transactionId });
};

exports.deleteTransaction = deleteTransaction;

 

반응형