[항해99] 45일차 클론코딩
항해 99
45일차 :
클론코딩 프로젝트 , 으ㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓㅓ
하다가 하루가 다지났다.
1. 뭐라고해야하지 이게뭔지 표현할방법이없네
comment안에있는 like의 오브젝트를 가져오고싶엇는데
findOne하고 바로 .like을 하면 안나온다.
const post = await Post.findOne({ postId }).like
console.log(post)
이게 왜안돼지 짜증내면서 한번 나눠서 해보니깐 됫다.
findOne뒤로 object를 나누기보다는 한번더 변수로지정해서 나눠야하는것같다.
const post = await Post.findOne({ postId })
const like = post.like
console.log(like)
2. 깊은복사와 얕은복사?
아직까지는 자세히는모르곘지만, 일단 이런게있다라고 알고있는것만으로도 레벨업 되는 느낌이다.
내 한정된 머리가지고짠 코드로는 당연히 돌아가야할 것들이 안돌아가서 짜증내고있을때
하늘에서 내려오신 상현님과 예지님이 디버깅을 도와주셨다.
좋아요기능 api를 만들고있었는데, 쉬울꺼라 생각하고 미뤄놧다가 만들면서 후회하고있었다.
로직은 :
좋아요버튼을 누루면 -> userList에서 내 이름이있는지확인한다 -> 있으면 likeCnt 에서 -1을하고 list에서 내이름을 뺸다.
list에 내이름이없으면 -> likeCnt 를 +1하고 list에 내이름을 넣는다.
빛예지님이 도움주신부분 :
1. userList.splice(i,1) => 첫번쨰 arg는 index number, 두번쨰 arg는 몇개를 지울껀지
2. post.like.likeCnt= likeCnt를 다시 설정해줘야한다
array는 원래 origin 을 가져오지만 숫자는 걍 값반 복사해온다 - > 깊은복사? 얕은복사 이쪽인것같은데 아직 확실하진않음 ㅜㅜ
가 아니라 원시값과 참조값을 공부해야한다.
router.put("/:postId/like", authMiddleware, async (req, res) => {
console.log("like API")
const { postId } = req.params
const user = res.locals.user
const firstName = user.firstName
const lastName = user.lastName
const profilePic = user.profilePic
const userId = user.userId
const userInfo = { firstName, lastName, profilePic, userId }
const post = await Post.findOne({ postId })
let likeCnt = post.like.likeCnt
let userList = post.like.userList
const isExist = userList.find(a => a.userId === userId)
if (isExist) {
for (let i = 0; i < userList.length; i++) {
const targetId = (userList[i].userId)
if (targetId === userId) {
userList.splice(i, 1)
post.save()
}
}
likeCnt = likeCnt - 1
post.like.likeCnt = likeCnt
return res.status(200).send("successfully unlike")
} else {
userList.push(userInfo)
likeCnt = likeCnt + 1
post.like.likeCnt = likeCnt
post.save()
}
res.status(201).send("like successfully updated")
})
예지님이랑 말할때마다 연예인한테 말하는느낌 (?) ,
상현님은 큰형같은느낌 (?)
어쩃든, 해결해주시고 명언도 남겨주셧다.
"오늘 한 내삽질은 미래의 내연봉이 될것이다"
연봉 6만불 받게해주세요....
https://jw910911.tistory.com/97
자바스크립트 : 깊은 복사 vs 얕은 복사
깊은 복사 깊은 복사는 변수에 다른 변수의 값을 대입했을때 각각의 변수가 독립적으로 존재하고 값만 복사 되었을 때를 말합니다. 즉 원본의 값만을 복사하여 반환 합니다. // 일반변수의 깊은
jw910911.tistory.com
깊은 복사와 얕은 복사에 대한 심도있는 이야기
자바스크립트 개발자라면 반드시 알고 있어야하는 깊은 복사와 얕은 복사에 대해
medium.com
3. 스케마에서 type :array로 넣어야 array안에 object가들어간다 .
like: {
likeCnt: { type: Number, default: 0 },
userList: { type: Array }
},
// userList : [{type: string}] 으로하면 userList에 스트링밖에안들어간다
https://www.youtube.com/watch?v=v67LloZ1ieI
https://velog.io/@1000nion/%EC%9B%90%EC%8B%9C%EA%B0%92%EA%B3%BC-%EC%B0%B8%EC%A1%B0%EA%B0%92
원시값과 참조값
ECMAScript의 변수는 원시 값과 참조 값 두 가지 타입의 데이터를 저장할 수 있다. 변수에 값을 할당하면 자바스크립트 엔진은 해당 값이 원시 데이턴인지 참조인지 판단한다. 원시 값은 단순한 데
velog.io
4. 상현님이 내 til를 보신다고했다. 상현님이랑 친해지고싶다.
'IT > Bootcamp 항해99' 카테고리의 다른 글
[항해99] 47일차 혼돈의 카오스의 날 (1) | 2021.07.23 |
---|---|
[항해99] 46일차 살려주세요. (5) | 2021.07.23 |
[항해99] 44일차 몽구스 populate (0) | 2021.07.21 |
[항해99] 43일차 API완성 JWT토큰 , populate, ref mongoose (0) | 2021.07.20 |
[항해99] 42일차 API설계와 포스트맨 사용법 (0) | 2021.07.18 |