Skip to content

Instantly share code, notes, and snippets.

@seungha-kim
Created November 7, 2018 09:39
Show Gist options
  • Save seungha-kim/d172d6b576bc8b21c1edc7e3af5da6d8 to your computer and use it in GitHub Desktop.
Save seungha-kim/d172d6b576bc8b21c1edc7e3af5da6d8 to your computer and use it in GitHub Desktop.
댓글 추가가 제대로 되지 않는 문제의 원인과 해결책

_embed 쿼리 스트링이 제대로 동작하지 않는 문제

문제 관찰 결과 -

  1. POST /posts/1/comments 요청을 보내면 새로 생성되는 댓글 객체의 postId 속성에 문자열 '1'이 저장됩니다. (원래는 숫자 1이 저장되어야 함. 이는 json-server의 버그)
  2. 이렇게 관계를 나타내는 속성에 문자열이 저장되어 있을 경우, _embed가 제대로 동작하지 않는 것으로 보입니다.
  3. _embed를 쓰지 않고도 요청을 한 번 더 보내서, 필요한 데이터를 가져올 수는 있습니다. 하지만 부가적인 요청을 보내야 하므로 페이지 로딩 속도가 느려집니다.

해결책

postId 속성에 문자열이 저장되는 버그를 회피하기 위해서, 댓글 생성 시 아래 코드를

await api.post(`/posts/${postId}/comments`, {
    body: '...'
})

아래와 같이 고쳐 쓰세요. (postId 직접 넣어주기)

await api.post(`/comments`, {
    body: '...'
    postId: postId
})

다른 경우에도, 관계 설정을 해줄 때 중첩된 경로로 POST 요청을 보내지 마세요. 대신 관계를 나타내는 속성을 직접 저장해주세요. 이렇게 하면 xxxxId에 숫자가 잘 저장되고, _embed 쿼리 스트링의 기능이 문제없이 동작합니다.

@seungha-kim
Copy link
Author

실제로 게시판 코드를 어떻게 수정하면 되는지 알고 싶으시다면 이 링크를 참고하세요

seungha-kim/fds-bbs-practice@4f4f5e3

@seungha-kim
Copy link
Author

관계를 표현하는 속성 이름에는 꼭 단수를 써주셔야 합니다. 예를 들어, 쇼핑몰 API 서버의 경우라면

  • 특정 옵션에 대한 장바구니 항목을 생성하고 싶은 경우 - 장바구니 항목 객체의 속성에 optionId 라고 적어줘야 합니다. (optionsId가 아님!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment