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_aggregate
は
posts
テーブルに紐づく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においてこのようなエラーが出た場合、今回の内容でなくとも
自分の場合は適切な権限がRequestのRoleに付与されていなかったというケースがほとんどでした。
同じようなエラーが出た方で、ここら辺の確認が漏れている場合は
確認してみると良いのでは無いでしょうか。
Author And Source
この問題について(Hasuraでの「Error: field "XXX" not found in type: 'XXX'」エラー), 我々は、より多くの情報をここで見つけました https://qiita.com/shin_k_2281/items/fbdb3504bc205d54b960著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .