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개보다 더 많이 주문 해서 에러!
에러 핸들링 2)
userId = 8 인데 productId 1, 2 인 게 장바구니 carts에 없으니!
에러 메세지 나오고,
수량 변화도 없음
에러핸들링 3)
에러 핸들링 반영한 코드
utils > throwError.js
utils > errorHandler.js
orderRouter.js
orderController.js.createOrders를 asyncWrap로 묶어주었기에,
orderController.js에 try, catch 필요 없음
orderController.js
orderService.js
'Wecode - Project 3 (부트캠프) > Project 3 과정' 카테고리의 다른 글
Project 3 - API document postman으로 작성하기 [개념] (0) | 2023.10.25 |
---|---|
Project 3: [장바구니에 여러 products 담길 때], 주문/결제 api orderService.js (0) | 2023.10.24 |
Project 3 -[주문 api] unit test; test code 성공 (에러 핸들링 없이) (0) | 2023.10.22 |
토큰 담아 req.body 보내기 (0) | 2023.10.22 |
Project 3 - [결제 api] 완성 - 포인트 차감 (0) | 2023.10.20 |