[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();
Author And Source
이 문제에 관하여([TIL] 210717), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dennis9352/TIL-210716저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)