Ошибка шлюза API (ValidationException: ExpressionAttributeValues ​​не должно быть пустым) при попытке обновить запись DynamoDB - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в AWS и пытаюсь настроить серверную часть для веб-сайта моего приятеля. Я могу «получать» записи из своей базы данных (называемой «isThrowingTable»), но не могу «помещать» в нее обновления. Я запускаю тело запроса, как показано на рисунке / коде ниже, и получаю тело ответа (ошибку), как показано на рисунке / коде (см. Строку 28 лямбда-функции, чтобы увидеть, как создается этот ответ, я добавил материал для его отладки )

Тело запроса, Ресурсы и сообщение об ошибке шлюза API

ERROR: ValidationException: ExpressionAttributeValues must not be empty Unable to put product: event.body {
    "dataName": "throwingStatus",
    "updatedInfo": false
} into params {"TableName":"isThrowingTable","Key":{},"UpdateExpression":"set info = :info","ExpressionAttributeValues":{},"ReturnValues":"UPDATED_NEW"} dataName: undefined updatedInfo undefined

{
    "dataName": "throwingStatus",
    "updatedInfo": false
}

Это лямбда, которая запускается из теста шлюза

'use strict';
const AWS = require('aws-sdk');
const documentClient = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event, context) => {
  let responseBody = "";
  let statusCode = 0;
  
  //const { dataName, updatedInfo } = JSON.parse((event.body)); //SyntaxError: Unexpected token in JSON at position 1
    const dataName = event.body.dataName
    const updatedInfo = event.body.updatedInfo
   var params = {
    TableName: "isThrowingTable",
    Key: {
      id: dataName
    },
    UpdateExpression: "set info = :info",
    ExpressionAttributeValues: {
        ":info": updatedInfo
    },
    ReturnValues: "UPDATED_NEW"
  };

  try {
    const data = await documentClient.update(params).promise();
    responseBody = JSON.stringify(data);
    statusCode = 201;
  } catch(err) {
    responseBody = `ERROR: ${err} Unable to put product: event.body ${event.body} into params ${JSON.stringify(params)} dataName: ${dataName} updatedInfo ${updatedInfo}`;
    statusCode = 403;
  }

  return {
    statusCode: statusCode,
    headers: {
      "Content-Type": "application/json",
      "access-control-allow-origin": "*"
    },
    body: responseBody
  };
};

Как вы можете видеть в сообщении об ошибке, params.Key и params.ExpressionAttributeValues ​​не установлены, и я не уверен, почему. В распечатке event.body вы можете увидеть dataName (идентификатор элемента в базе данных) и updatedInfo, но попытка его захватить приводит к «undefined». Я надеюсь на исправление, а также на то, чтобы узнать, почему это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...