通过AWS Amplify使用Query API获取所有项目

时间:2019-06-30 01:00:20

标签: node.js aws-amplify dynamodb-queries amplifyjs

如何通过调用dynamodb.query获得所有物品?

文档指出,我们需要寻找LastEvaluatedKey的存在。只是想知道我们如何有效地汇总所有项目

app.get(path, function (req, res) {
  var allItems = [];
  var params = {
    TableName: tableName,
    "IndexName": "status-index",
    "KeyConditionExpression": "#attrib_name = :attrib_value",
    "ExpressionAttributeNames": { "#attrib_name": "status" },
    "ExpressionAttributeValues": { ":attrib_value": req.query.status },
    "ScanIndexForward": false
  };

  dynamodb.query(params, onQuery);

  function onQuery(err, data) {
    if (err) {
      res.json({ error: 'Could not load items: ' + err });
    } else {
      // Should I be aggregating all the items like this?
      allItems = allItems.concat(data.Items);

      // Then should I set it to res like this to return all the items?
      res.json(allItems);

      if (typeof data.LastEvaluatedKey != 'undefined') {
        params.ExclusiveStartKey = data.LastEvaluatedKey;
        dynamodb.query(params, onQuery);
      }
    }
  }
});

请查看代码中的评论。那就是我认为我们需要适当的代码来汇总所有项目并返回响应的地方

我还没有找到一种调试方法,因为我对DynamoDB和AWS Amplify还是很陌生。也请让我知道在AWS Amplify备份GET API中是否有更简便的方法来调试它。

2 个答案:

答案 0 :(得分:0)

这不是对您问题的直接答案,而是一个建议。我写了一篇文章"How To Use AWS AppSync in Lambda Functions "

它的TLDR是:

  • 创建一个Lambda函数,该函数使用AppSync客户端执行 GraphQL操作。使用Polyfills并安装所有必要的东西 依赖项。
  • 确保Lambda函数具有正确的执行策略。
  • 使用AppSync的多重身份验证允许两个由签署的请求 Amazon Cognito用户池以及使用签名的请求 亚马逊的IAM。这样,客户端和服务器(也称为 Lambda函数)将通过身份验证,并且可以具有不同的CRUD 权限。

如果我是您并且想通过Lambda函数访问我的数据库,我将按照该教程并使用AppSync进行操作。对您而言重要的优点之一是您不必关心LastEvaluatedKey,而可以使用AppSync的nextToken,它更安全。

答案 1 :(得分:0)

查询返回分页结果-如果需要所有数据,则需要继续查询和汇总,直到 LastEvaluatedKey 为空。

引用:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html