NodeJS AWS Lambda, DynamoDB не записывает результат и не регистрирует - PullRequest
0 голосов
/ 25 января 2020

У меня проблемы с DynamoDB. Я настроил свои лямбда-разрешения для полного CRUDL (доступ администратора, поэтому никаких ограничений). Ниже приведен обработчик, и он основан на doca https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.03.html

const uuidv4 = require("uuid/v4");
const services = require("./services/services");
var AWS = require("aws-sdk");
AWS.config.update({ region: "eu-west-2" });
var docClient = new AWS.DynamoDB.DocumentClient();
var tableName = "usersTable";

module.exports = {
  registerUser: async (event, context) => {
    const id = uuidv4();
    let body;
    if (event.body !== null && event.body !== undefined) {
      body = JSON.parse(event.body);
    }

    const isValid = await services.validateUser(body);

    if (isValid) {
      var params = {
        TableName: tableName,
        Item: {
          userId: "123abc",
          firstName: "finn",
          lastName: "murtons",
          email: "email@email.com",
          password: "secret"
        }
      };

      console.log("Adding a new item...");
      console.log(" Adding params", params);
      docClient.put(params, function(err, data) {
        if (err) {
          console.error(
            "Unable to add item. Error JSON:",
            JSON.stringify(err, null, 2)
          );
        } else {
          console.log("Added item:", JSON.stringify(data, null, 2));
        }
      });
    }
  },
  ... other functions

Для этого примера я жестко прописываю параметры для ясности, но, очевидно, я обычно получаю их из event.body.

Когда я отправляю запрос на эту лямбду, я получаю ошибку 502. Глядя на журналы cloudwatch, он достигает:

INFO     Adding params { TableName: 'usersTable',
  Item:
   { userId: '123abc',
     firstName: 'finn',
     lastName: 'murtons',
     email: 'email@email.com',
     password: 'secret' } }

Тогда журналов больше нет. Игнорируйте функцию isValid, она просто проверяет наличие в теле события запроса обязательных полей.

У кого-нибудь есть идеи, где я могу ошибаться?

1 Ответ

2 голосов
/ 25 января 2020

Вероятно, лямбда завершается до того, как будет сделан вызов DynamoDB. Вы должны сделать звонок Promise и ждать его:

await docClient.put(params).promise();
...