일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Flutter
- MongoDB
- ES6
- HTML
- express
- heroku
- clonecoding
- javscript
- API
- CLONE
- DART
- frontend
- CSS
- backend
- react
- pug
- graphQL
- node.js
- Component
- ECMAScript
- 자바스크립트
- nodejs
- Mongoose
- Session
- 리액트
- form
- GRID
- JavaScript
- TypeScript
- NextJs
- Today
- Total
Enjoy Programming
좋아요 구현하기 본문
사이드 프로젝트로~ 유튭과 인스타를 클론하면서 진행중인데~
좋아요를 구현해보았다.. 생각보다 어렵진 않았는데~
1. db model의 스키마 타입 정하기
2. 라우터 url설정하기
3. 컨트롤러 작성하기
4. fetch 를 이용해 라우터에 POST로 해당값을 서버로 보내주고~
5. response로 db에 저장된 값을 가져와서 템플릿에 뿌려준다~
일단 완성된 것은/
photo모델의 rating 스키마 타입은 objectId로 하고 User모델을 참조한다.
User 모델 또한 좋아요 한 영상이나 사진을 각각의 프로퍼티에 배열로 담아준다.
apiRouter를 통해 해당 값들을 받아오도록 한다.
템플릿에서 rating prop의 값이 배열로 정해져있으므로 length로 해당 좋아요 갯수를 정한다.
프런트의 자바스크립트로 브라우저상의 버튼을 클릭하면~ 해당 photo의 dataset에 저장된 id를 이용해 POST로 해당 라우터로
접근한다. 만약 response의 status가 201이면 ratingCount를 thumbCounting 에 파라미터를 전달해주고
fake로 실시간으로 올라가는 것처럼 보여준다~
컨트롤러가 좀 길긴한데~ 요기서 고민한게~ 좋아요를 계속 누를수 있게 만들면 안된다는 것이다.
유저 한명당 하나의 좋아요만 가능해야한다.
처음 시행착오가 카운팅이니까 type을 Number로 주고진행했다는것. 위 로직에서 ratingCount에 +1을 하거나
이미 해당 유저가 해당 사진을 좋아요를 했으면 -1로 처리하는 방식으로 햇는데~
문제점이 1이상일때는 1 , 2 ,1 , 2이렇게 반복이 되지만 0일때 -값이 들어와버리면 -로 무한히 가버린다는 것이다...
그래서 방법을 바꾼것이 type을 objectId로 바꾸고 좋아요 한 숫자는 해당 프로퍼티의 length로 결정해버렸다.
한방에 해결이 되었다~ 깔끔하다.
음 구독도 마찬가지일듯 싶다. 구독하기를 구현하고서 프로필에 내가 구독한 사람의 목록을 뽑아내도록 해보자~
'JavaScript > Node.JS' 카테고리의 다른 글
socket.io 간단한 채팅 테스트 (0) | 2021.08.09 |
---|---|
Socket IO (0) | 2021.08.08 |
Product && develop Environment (0) | 2021.06.30 |
Github and aws s3 - 2 (0) | 2021.06.29 |
Github and aws s3 - 1 (0) | 2021.06.29 |