오늘 뭐했냐/끄적끄적

23. 06.27 LV1 과제 완료

스스로에게 2023. 6. 27. 17:13

 주특기 1주차 과제를 완료했다. 생각보다 문제도 많았지만 최대한 과제가 요구하는 것들을 맞춰서 진행을 했다. 아래 내용들 모두 문제가 있었고 그 부분에 대해서 찾아보고 확인하며 해결했던 방법들이다.

router.post("/:_postId/comments", async (req, res) => {
    const { _postId } = req.params;
    const { user, password, content } = req.body;

게시글에 대한 댓글을 다는 생성하는 부분이다. 처음엔 이 댓글을 다른 라우터로 분리하려고 시도했지만 다른 라우터로 분리 했을 때 postId를 가져오지 못해서 결국 게시판 라우터에 같이 작성을 했다. 이건 피드백을 받을 예정이며 댓글 생성 시 postId를 같이 저장을 해서 어떤 게시글의 댓글인지 구분해 주었다.

"createdAt": {
        type: Date,
        required: true,
        default: new Date()
    },

생성 시간은 저번 알려주신 내용을 통해 처리했다.

 

const post = await Comments.find({ _postId: _postId })
const [comments] = await post.filter(p => p._id.toString() === _commentId)

 

댓글 수정 혹은 삭제시에 게시글의 주소와 댓글의 주소 두 개 모두 일치해야한다고 생각되서 2번의 확인 과정이 필요했다. 이 때 _id(DB에 저장시 자동으로 생기는 ID값)은 그냥 비교하니 원하는 결과가 나오지 않았다. 그래서 콘솔로 확인하니 객체타입이고 new object(1123df34235fds) 이런 식으로 나와서 방법을 찾아 문자열로 바꾸고 비교해주었다.

 

이후 에러처리를 하려는데 이것도 많이 찾았다. 

try {
        const createdPosts = await Posts.create({ user, password, title, content, createdAt })
    } catch (err) { return res.status(400).json({ message: '데이터 형식이 올바르지 않습니다.' }) }

게시글 혹은 댓글 생성 시 schemas에서 required: true이렇게 처리한 후 try chtch문을 이용해 빠진 빠진 데이터가 있다면 에러처리를 하였다. 

 

 if (!password || !title || !content) { return res.status(400).json({ message: '데이터 형식이 올바르지 않습니다.' }) }
    let posts
    try {
        [posts] = await Posts.find({ _id: _postId })
    } catch (error) { return res.status(400).json({ message: '게시글 조회에 실패하였습니다.' }) }

수정 작업 시에 필요한 조건이 입력되지 않았을 경우 어떻게 나올까 하며 콘솔로 찍어봤고 빈 객체가 출력되는 것을 확인했다. 그래서 !연산자를 활용하여 특정 데이터가 없을 경우의 빈 객체를 true값으로 바꿔줘서 에러처리를 했고, 주소값이 맞지 않을 경우에도 try catch문으로 에러처리를 했다.

 

if (post.length === 0) { return res.json({ message: '데이터 형식이 올바르지 않습니다.' }) }
if (!comments) { return res.json({ message: '댓글 조회에 실패하였습니다.' }) }

  댓글의 경우 두 번의 확인 과정이 필요했는데 처음 게시글의 주소를 확인할 땐 배열로 값이 전달되게 해서 길이가 0인 경우, 두 번째 댓글의 주소를 확인할 땐 아까와 같이 빈객체가 전달될 경우 !연산자로 true로 바뀌게 되어 에러처리를 했습니다.

 

그리고 데이터 조회 부분에 문제가 생기는 경우가 있어서 한참을 뒤져보다가 우연히 알게되었다. get사용시 body안에 데이터가 있으면 문제가 생겼었다. 그런데 이것도 나중에 다시 확인해보니 { "test":"test" , } 이렇게 마지막에 쉼표가 에러를 발생시키는 것 같았다. 이에 대해서 body를 콘솔로 확인해보려 했지만 바로 에러가 생겨서 아직 해답을 찾지 못해 이 부분도 피드백을 받을 수 있으면 좋겠다.

 

가장 기초가 되는 CRUD만 가지고도 이렇게 힘드니 아직 갈 길이 멀다.