Wecode - Project 3 (부트캠프)/Project 3 과정

Project 3 - [주문/결제 api] 에러 핸들링 코드 및 과정

Queen Julia 2023. 10. 24. 01:10

3가지 에러

 

1.     // 에러 핸들링: carts 에 담기지 않은 product를 주문할 때 -> productId 라서 for()안에 들어가야 함
    const isProductInCarts = await orderDao.isProductInCarts(userId, productId); // await: userId, productId,(orderDetails의 ) quantity를  orderDao로 보내준다
    console.log(isProductInCarts);

    if (productId !== isProductInCarts) {
      throw new Error('ordered productId is not in the carts');
    }

userId가 8인데 이 유저에 해당하는 게 carts 에 없다는 거 

 

 

2.     // 에러 핸들링 : carts에 담은 수량  < 주문한 수량__  장바구니 < order 수량 많은 경우 없음_ 장바구니에서 저장 후 넘어가니
    if (cartQuantity < quantity) {
      throw new Error('ordered more products than cartsQuantity');
    }

 

3. 

  // 에러 핸들링: order.totalPrice > user : 포인트가 부족할 때  ( 갖고 있는 point보다 비싼 걸 살 때)
  if (totalPrice > isUsersPoints) {
    throw new Error('not enough points');
  }

 

userId =8 의 points 0일때 

 

 

 

controller로 올려가는


과정

1. 

2.

 

원래 위 chat gpt 코드와 같았는데,


이후 아래와 같이 수정되었다 :
위 코드로는 req.body에 배열 [ ] 로 담기는데, 굳이 그럴 필요가 없으니.

에러는 어짜피 하나만 나오는데, 배열로 담기지 않게 하는게
  더 좋다 라는 뜻 


결과

에러 핸들링 1) 

장바구니에 있는 수량 1개보다 더 많이 주문 해서 에러! 

수정 후에는, body에 [ ] 배열 없이 담김

에러 핸들링 2) 

userId = 8 인데 productId 1, 2 인 게 장바구니 carts에 없으니! 

에러 메세지 나오고, 

수량 변화도 없음 

수정 후에는, body에 [ ] 배열 없이 담김

에러핸들링 3) 

수정 후에는, body에 [ ] 배열 없이 담김
수정 후에는, body에 [ ] 배열 없이 담김


에러 핸들링 반영한 코드

utils > throwError.js

 

utils > errorHandler.js 

next 로 활용할 경우 주석된 코드 활용

 

 

orderRouter.js 

orderController.js.createOrders를 asyncWrap로 묶어주었기에, 

orderController.js에 try, catch 필요 없음 

 

orderController.js

수정 전
수정 후

orderService.js 

 

 

 

 

Project2: Middleware 활용

개요 🗣 하나의 API가 온전히 작동하기 위해서는 여러 단계를 거쳐야 합니다. 그 단계를 자유롭게 추가하거나 삭제하는 방법인 middleware에 대해 배워 봅시다. 학습 목표 middleware가 무엇인지 설명

pm-developer-justdoit.tistory.com

 

에러 핸들링 w/ [asyncwrap, next, ErrorHandler.js ]

동기 분께서 설명해주신 부분 1) async를 쓸 때 controller.js 에서 try, catch 지우고 errorHandler.js 사용 ( 에러 시 일로 감) 1-1) errorHandler.js 에서 next 사용 X 1-2) errorHandler.js 에서 next 사용 2) async를 안 쓸 때

pm-developer-justdoit.tistory.com

 

 

middlewware 공부 , errorhandler, async

에러 핸들링 2 [적용] 1. throw로 에러 던져보기 에러를 던지는 방법으로 throw 이는 개발자가 작성하는 모듈에서 발생가능한 에러 상황에서 던지게 되며 상위 계층이나 호출하는 곳에서 모듈의 에

pm-developer-justdoit.tistory.com

 

에러 핸들링 [개념] 1

일반적으로 Javascript 에서는 try-catch문과 throw를 이용하여 에러를 처리 에러 핸들링 미들웨어는 에러를 처리하기 위해 반복적으로 진행되는 코드를 모듈화하여 소프트웨어의 확장성과 생산성을

pm-developer-justdoit.tistory.com

 

에러 핸들링 2 [적용]

1. throw로 에러 던져보기 에러를 던지는 방법으로 throw 이는 개발자가 작성하는 모듈에서 발생가능한 에러 상황에서 던지게 되며 상위 계층이나 호출하는 곳에서 모듈의 에러를 감지할 수 있습니

pm-developer-justdoit.tistory.com

 

 

Project 3: [주문 api] - if 에러 핸들링, transaction

에러 핸들링 1. 2. 2-1) 느낌표 위치 2-2) 공백 주의 참고 3. 수량이 36개 남았을 때 남은 36개 다 넣었을 때 장바구니 0개가 됨 장바구니 carts 테이블에 원래 있던 carts id 2 가 사라짐 --> 재고가 없기에 3

pm-developer-justdoit.tistory.com