Я новичок в 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». Я надеюсь на исправление, а также на то, чтобы узнать, почему это происходит.