使用 AWS Amplify 从 DynamoDB 查询数据

Querying data from DynamoDB using AWS Amplify

我有一个 React 应用程序,我正在使用 AWS amplify。我的问题是,当我从 DynamoDB 查询数据时,是通过 AWS AppSync 的正确方法,然后我是否有一个查询数据库的 lambda 函数,或者 appsync 只是这样做吗?这样做的正确途径是什么?是 React->Appsync->lambda->DynamoDb 还是我遗漏了什么?此外,dynamo db 是否需要位于 EC2 实例或 AWS fargate 之类的内部,还是可以单独放置?谢谢!

你可以只做 React->AppSync->DynamoDb。 AppSync 具有可用于 DynamoDB 的一阶集成,这意味着 DynamoDB 可以作为 AppSync 数据源。因此,您可以直接从 AppSync 查询、更新、删除 DynamoDb 中的项目,而无需通过 Lambda。

您可以先导出 GraphQl 生成的查询,然后使用此代码(GraphQl 生成这样的文件夹 src/graphql/queries.js

const client = require("../common/gqlClient")();
const gql = require("graphql-tag");
const _ = require("lodash");

const { clubBySportStatus } = require("../common/queriesAndMutations");

    let allClubsList = async (sport) => {
      try {
         let clubsList;
         let clubsInfoList = [];
        let nextTokenInfo = null;
        do{ 
        let clubs = await client.query({
          query: gql(clubBySportStatus),
          variables: {
            sport: sport,
            eq: { status: "ACTIVE" },
          },
          limit: 100,
          nextToken: nextTokenInfo,
          fetchPolicy: "network-only",
        });
        clubsList = clubs.data.clubBySportStatus.items;
         clubsList.forEach((item) => clubsInfoList.push(item));
          nextTokenInfo = clubs.data.clubBySportStatus.nextToken;
        } while (Boolean(nextTokenInfo));
        if (clubsInfoList && clubsInfoList.length) {
          return {
            success: true,
            data: clubsInfoList,
          };
        }
      } catch (eX) {
        console.error(`Error in allClubsList: ${JSON.stringify(eX)}`);
        return {
          success: false,
          message: eX.message,
        };
      }
    };