Hasura에서 "Error: field "XXX"not found in type: 'XXX'"오류

Hasura에서 "Error: field "XXX"not found in type: 'XXX'"오류에 대해
개발 중에 Hasura API에 요청을 던질 때 여러 번 나왔기 때문에
피의 장소를 메모로 남겨 둡니다.
데이터 가져오기에는 Apollo를 사용합니다.

오류 발생 상황



다음과 같은 query를 실행했습니다.
gql`
  query GetRecentPost {
    posts(limit: 10, order_by: { id: asc }) {
      id
      image
      gender
      content
      created_at
      user {
        id
        display_id
        image
        name
      }
      comments_aggregate {
        aggregate {
          count(columns: id)
        }
      }
      likes_aggregate {
        aggregate {
          count(columns: id)
        }
      }
    }
  }
`

GraphQL에 관해서도 사용하기 시작해 날이 얕기 때문에, query 내용에 중복되는 곳이
있을지도 모르지만 아무쪼록 양해 바랍니다.

사용자의 최근 게시물 10개를 가져오고 게시한 사용자와
그 게시물에 대한 코멘트와 좋아요의 수를 얻는 것입니다.

이 query를 던졌을 때 다음 오류가 발생했습니다.Error: field "comments_aggregate" not found in type: 'posts'posts 필드에 comments_aggregate가 존재하지 않는 것 같습니다.

해결 방법



Hasura에서 정의한 테이블에 대한 Permission 설정이 원인이었습니다.
이번 에러문에 있다 comments_aggregateposts 테이블에 묶는다 comments 테이블의 건수를 집계하는 query로
테이블을 작성한 시점에서 Hasura측이 마음대로 준비해 주는 것입니다.

그러나 이 집계 query에는 디폴트로 Permission가 admin 이외 disable가 되어 있었습니다.
아래는 posts 테이블과 users 테이블의 중간 테이블에서 게시물에 대한 주석을 나타냅니다.post_comments 테이블의 Permissions 탭의 내용입니다.
(Hasura Console → DATA → 테이블에 있음)


Aggregation queries permissions 의 Allow role [role] to make aggregation queries
라는 확인란을 선택하면 오류가 해결되었습니다.
(유스 케이스에 따라 적절한 Role에 대해 설정하십시오)
(likes의 테이블에 대해서도 마찬가지로 설정했습니다.)

사이고에게



Hasura에서 이러한 오류가 발생하면 이번 내용이 아니더라도
자신의 경우에는 적절한 권한이 요청의 역할에 부여되지 않은 경우가 대부분이었습니다.
비슷한 에러가 나온 쪽으로, 여기변의 확인이 새는 경우는
확인해 보면 좋은 것이 아닐까요.

좋은 웹페이지 즐겨찾기