입문 주차 개인 과제

정창민·2022년 12월 16일
0

1. 객체(Object)에 key, value 추가하기

let test = {
  name : 'Kim',
  age : 29
}
let comments = {title : 'show'}

test['comments'] = comments

console.log(test)

let test {
  name : 'Kim',
  age : 29,
  comments : {
  		title : 'show'
  	}
}
  • 출력 시 test 객체에 comments객체가 key값으로 들어감

  • comments 객체의 key, value 값들도 할당되어진 형태




2. 댓글 목록 조회

mongoose의 populat의 대한 설명이 잘 나온 블로그를 참조하자!
https://charles098.tistory.com/172


  • comments 스키마
const mongoose = require("mongoose");

const commentsSchema = new mongoose.Schema({
  user : {
    type : String,
    required : true
  },
  password : {
    type : String,
    required : true
  },
  content : {
    type : String,
    required : true
  },
  time : {
    type : Date,
    default : Date.now
  },
  posts : {
    type : mongoose.Schema.Types.ObjectId,
    ref : "Posts"
  }
})

module.exports = mongoose.model("Comments", commentsSchema);

  • comments(댓글)에 posts(게시글) id가 치환된 형태

router.get('/comments/:_id', async (req, res) => {
  const {_id : postId} = req.params // postId , _id 이름 바꾸기 => postId

  try {
    const post = await Posts.findById(postId)
    if(post) {
      const comments = await Comments.find({posts : postId}).sort({time: -1}) // postId에 해당한 comments 데이터만 추출
      const newPost = post.toObject() //  1. mongoose에서 반환 된 객체는 자바스크립트의 객체가 아니다.
                                      //  2. toObject() 함수를 사용하여, key, value값을 객체에 할당시켜준다,
                                      //  3. 할당시킨 값을 새로운 변수에 삽입한다.
      newPost['comments'] = comments  //  post는 객체 안에 key값 value값 삽입

      return res.status(200).json({data : newPost}) // post 객체를 불러옴
    }
  } catch (err) {
    return res.status(500).json({error: err})
  }
})
  • Comments.find를 하여 comment 데이터만 const comments에 저장

  • 위에 1번에서 보았던 방식으로 했을 때, post객체에 comments 객체가 삽입이 안되는 상황

  • 이유 : mongoose에서 반환 된 객체는 자바스크립트 객체가 아니기 때문

  • 해결 : toObject() 함수를 사용하여 자바스크립트 Object로 변환

  • newPost ( 구 post )에 comments 객체를 key값으로 삽입

profile
안녕하세요~!

0개의 댓글