[TIL] 210717

내가 해야할 역할분담중에 리뷰 CRUD가 먼저인거 같아서 리뷰기능부터 시작했다.

📂 리뷰 작성

이미지 업로드 및 body 데이터저장은 저번 multer S3를 이용한 회원가입과 비슷하지만 다른점은 리뷰는 해당 음식점에 있는 리뷰이기 때문에 그 음식점 document와 연결시켜줘야한다. 그래서 MongoDB에서 참조 할수 있는 방법 중 하나인 .populate을 쓰기 위해 해당 음식점 document에 있는 리뷰 필드에 방금 작성한 리뷰 _id를 넣었다.

await review.save(async function () {
        try {
          shop.reviews.push(ObjectID(review.reviewId));
          review.userIds.push(ObjectID(userId));
          await shop.save();
          await review.save();
        } catch (err) {
          console.log("리뷰ref", err);
        }
      });

또 이번에는 이미지가 한장이 아니라 여러장이기 때문에 upload.single('image') 이 아닌 upload.array('image') 를 미들웨어로 넣어줬다. 그리고 여러 이미지의 location과 key들을 저장해야하기 때문에 map을 써서 넣었다.

const reviewImage = req.files.map((file) => file.location); 
const reviewImageKey = req.files.map((file) => file.key);

📂 리뷰 삭제

수정할때는 수정할 document만 수정해주고 참조 _id가 상관이 없지만 삭제해줄때는 해당 리뷰를 삭제하기전에 연결되어있는 음식점 document에서 참조 _id를 또 일일이 다 빼줘야한다.

const shop = await Shop.findById(shopId).exec();
    shop.reviews.remove(reviewId);
    
await Review.findByIdAndDelete(reviewId).exec();

좋은 웹페이지 즐겨찾기