DynamoDB AWS не возвращает ни данных, ни ошибок - PullRequest
0 голосов
/ 03 апреля 2020

Может ли кто-нибудь помочь мне здесь, я попробовал все: функции get и getItem НЕ возвращают ничего (в l oop, функция обещания), хотя в таблице динамодб есть запись. Также он не говорит об ошибке, поэтому я могу знать, что делать дальше.

У меня есть учетная запись AWS: база данных DynamoDB с таблицами и лямбда с ролью DynamoFullaccessDB для базы данных.

Я пытаюсь получить элемент из таблицы из той же учетной записи из DynamoDB (я создал несколько таблиц, попробовал использовать первичный ключ со строкой и номером)

Функция putItem работает, и она вставляет элемент в указанный таблицы, но ни getItem, ни DocumentClient не получают функцию get, поскольку они не возвращают никаких ошибок и не возвращают никаких элементов, хотя я указал правильный ключ и правильное имя таблицы.

Вот код лямбда-функция:

 var AWS = require('aws-sdk');
 AWS.config.update({region:'eu-central-1'});


exports.handler = async (event,context) => {
    // TODO implement
     // Create the DynamoDB service object
     AWS.config.update({region:'eu-central-1'});
     var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
      var params = {
  Key: {
   "testKey":{S: "sun"}
  }, 
  TableName: "test",
  ConsistentRead: true
 };
  var data =[];
 await ddb.getItem(params, function(err, data2) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);   
   data.push(err);
   data.push(data2);
 });


 const db = new AWS.DynamoDB.DocumentClient({
   region : 'eu-central-1' 
});

const params3 = {
  TableName : "test",
  Key: {
    testKey:"sun"
  }
};

  db.get(params3, (err, data4) => {
  if (err){
    console.log("Error:", err);
  } 
  else{
    console.log("Success:", data4.Item);

  } 
   data.push(data4.Item);
  console.log("Completed call");
});
         const response = {
        statusCode: 200,
        body: JSON.stringify(data)+JSON.stringify(" LUCHIAN ----") ,
    };
    return response;

};

enter image description here

enter image description here

enter image description here

enter image description here

1 Ответ

1 голос
/ 04 апреля 2020

Проблема в том, что вы смешиваете синтаксис между async / await и обратными вызовами, я предполагаю, что вы хотите дождаться обещания getItem.

const AWS = require('aws-sdk')
AWS.config.update({ region: 'eu-central-1' })

const documentClient = new AWS.DynamoDB.DocumentClient()

exports.handler = async () => {
     const params = {
         Key: {
             testKey: { S: 'sun' },
         },
         TableName: 'test',
         ConsistentRead: true,
     }

     const item = await documentClient.getItem(params).promise()

     return {
         statusCode: 200,
         body: JSON.stringify(item) + JSON.stringify(' LUCHIAN ----'),
     }
 }
...