[항해99] 45일차 클론코딩

IT/Bootcamp 항해99|2021. 7. 21. 21:40

항해 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

https://medium.com/watcha/%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%99%80-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%8B%AC%EB%8F%84%EC%9E%88%EB%8A%94-%EC%9D%B4%EC%95%BC%EA%B8%B0-2f7d797e008a

 

깊은 복사와 얕은 복사에 대한 심도있는 이야기

자바스크립트 개발자라면 반드시 알고 있어야하는 깊은 복사와 얕은 복사에 대해

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를 보신다고했다. 상현님이랑 친해지고싶다. 

 

 

 

반응형

댓글()