Получить все элементы с помощью API запросов через AWS Amplify - PullRequest
1 голос
/ 30 июня 2019

Как мы можем получить все элементы, вызвав 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.Позвольте мне также узнать, есть ли более простой способ отладки в API-интерфейсе GET с резервной копией AWS.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Запрос возвращает разбитые на страницы результаты - если вам нужны все данные, вам нужно продолжать запрашивать и агрегировать, пока ваш LastEvaluatedKey не станет пустым.

См .: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html

0 голосов
/ 30 июня 2019

Это не прямой ответ на ваш вопрос, а предложение.Я написал статью «Как использовать AWS AppSync в лямбда-функциях» .

TLDR:

  • Создайте лямбда-функцию, которая используетКлиент AppSync для выполнения операций GraphQL.Используйте polyfills и установите все необходимые зависимости.
  • Убедитесь, что у функции Lambda есть правильная политика выполнения.
  • Используйте мульти-аутентификацию AppSync, чтобы разрешить как запросы, подписанные пользовательскими пулами Amazon Cognito, так и запросы.которые подписаны с использованием Amazon IAM.Таким образом, и клиент, и сервер (он же Lambda-функция) будут аутентифицированы и могут иметь разные разрешения CRUD.

Если бы я был вами и хотел получить доступ к моей базе данных через функцию LambdaЯ бы следовал этому руководству и делал это с помощью AppSync.Одним из преимуществ, которые важны для вас, является то, что вам не нужно заботиться о LastEvaluatedKey, и вместо этого вы можете использовать AppSync nextToken, который является более безопасным.

...