게시판 CRUD만 완성한 상태에서 게시물 댓글 기본 CRUD까지 마무리 했다.
기본적인 api는 마무리 한 셈. 댓글 부분을 완성하고 이해하게끔 도움을 많이 준 정민님께 무한한 감사를.
프로젝트를 마무리 지으면서 확실하게 알게 된 부분을 정리하는 시간을 갖겠다.
한 번에 하나의 작업만 할 수 있는 싱글 스레드인 자바스크립트는 동기식 언어인데 이를 보완하기 위해 비동기가 생겨났다. 비동기 방식에는 콜백 함수, promise, async&await 이렇게 크게 세가지가 있다.
구글링을 통해 콜백을 보완하기 위해 promise가 promise를 보완하기 위헤 async가 생겼다고 이해했다.
일단 이번 프로젝트에는 async&await을 사용했기에 이 부분만 짚고 넘어가겠다.
router.get("/comment/:postId", async(req, res) => { // 비동기식으로 쓸 수 있게 해주는 async
const {postId} = req.params;
const detail = await Comment.find({postId1: postId}) // db에서 찾아올건데, postId에 대한 번호와 db에 있는 postId1 두개가 서로 같은 것만 찾아 오겠다.
res.json({detail}) // await이 붙어있는 함수는 await을 만나면 await 먼저 실행하고 다음으로 넘어간다.
})
어제 코드를 짜면서 내가 이해하기 위해 정리한 주석들.
함수 앞에 async를 붙이고, 비동기 처리할 코드 앞에 await를 붙인다.
구조분해할당은 객체나 배열의 속성을 해체해 그 값을 변수에 담을 수 있게 하는 표현식이다.
router.delete("/comment/:commentId", async(req, res) => {
const {password} = req.body // body에서 입력 받은 password를 객체구조분해할당을 통해 저장
const {commentId} = req.params // params에서 입력 받은 :commentId를 객체구조분해할당을 통해 저장
console.log(password)
let [deleteComment] = await Comment.find({commentId:commentId}) // db commentId와 입력받은 commentId 값이 같을 때 배열구조분해할당을 통해 deleteComment에 저장 ex> [{}] => {}
console.log(deleteComment)
commentPassword = deleteComment.password // deleteComment.password를 통해서 password에 대한 값을 빼내 commentPassword에 저장
console.log(deleteComment)
이번 과제를 짜면서 내가 사용한 구조분해할당