簡體   English   中英

AWS Appsync Graphql 查詢以獲取項目列表返回空數組,即使 dynamodb 表中有項目

[英]AWS Appsync Graphql query to get list of items returns empty array even though the dynamodb table has items in it

我正在運行一個 Angular 11 應用程序,該應用程序使用 GraphQL 和 dynamoDB 作為后端與 AWS Amplify 和 Appsync 集成。

這是我的 Graphql 架構:-

type School
  @model
  @auth(
    rules: [{ allow: owner, ownerField: "admins", operations: [update, read] }]
  ) {
  id: ID!
  name: String!
  admins: [Member]
  classes: [Class] @connection(name: "SchoolClasses")
  members: [Member] @connection(name: "SchoolMembers")
}

type Class
  @model
  @auth(
    rules: [{ allow: owner, ownerField: "admins", operations: [update, read] }]
  ) {
  id: ID!
  name: String!
  school: School @connection(name: "SchoolClasses")
  admins: [Member]
  members: [Member] @connection(name: "ClassMembers")
}

type Member @model @auth(rules: [{ allow: owner }]) {
  id: ID!
  name: String!
  school: School @connection(name: "SchoolMembers")
  class: Class @connection(name: "ClassMembers")
}

這是我的客戶定義:-

const client = new AWSAppSyncClient({
  url: awsconfig.aws_appsync_graphqlEndpoint,
  region: awsconfig.aws_appsync_region,
  auth: {
    type: awsconfig.aws_appsync_authenticationType,
    jwtToken: async () =>
      (await Auth.currentSession()).getAccessToken().getJwtToken(),
  },
  complexObjectsCredentials: () => Auth.currentCredentials(),
  cacheOptions: {
    dataIdFromObject: (obj: any) => `${obj.__typename}:${obj.myKey}`,
  },
});

這是我的查詢方法:-

    client
      .query({
        query: ListSchools,
      })
      .then((data: any) => {
        console.log('data from listSchools ', data);
        console.log(data.data.listSchools.items);
      });
  };

這是我的查詢定義:-

import gql from 'graphql-tag';

export default gql`
  query ListSchools(
    $filter: ModelSchoolFilterInput
    $limit: Int
    $nextToken: String
  ) {
    listSchools(filter: $filter, limit: $limit, nextToken: $nextToken) {
      items {
        id
        name
        admins {
          id
          name
          createdAt
          updatedAt
          owner
        }
        classes {
          nextToken
        }
        members {
          nextToken
        }
        createdAt
        updatedAt
      }
      nextToken
    }
  }
`;

控制台中數據的 output 如下所示:-

{
   "data":{
      "listSchools":{
         "items":[],
         "nextToken":null,
         "__typename":"ModelSchoolConnection"
      }
   },
   "loading":false,
   "networkStatus":7,
   "stale":false
}

如您所見, items 是一個空數組。 但目前我的 dynamoDB 表中有 3 個項目:-

在此處輸入圖像描述

我究竟做錯了什么?

我檢查了這些區域,看看它是否正在查詢不同的區域,但它正在檢查正確的區域,所以我應該看到結果。 另外,如果我們查詢錯誤的表,它不會拋出錯誤嗎?

我想到了。 問題出在 GraphQL 架構定義中,我將 @auth 參數設置為僅允許某個管理員訪問列表,這就是我返回空數組的原因。 我刪除了@auth 參數,它現在返回正確的項目列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM