Я передаю параметры в Api Gateway для сохранения в DynamoDB с помощью AWS Lambda Node JS.
Запрос на интеграцию Api Gateway:
#set($inputRoot = $input.path('$'))
{
"name" : "$inputRoot.name",
"profileImage": "$inputRoot.profileImage",
"gender" : "$inputRoot.gender",
"interests": #foreach ( $item in ["$inputRoot.interests"] ) $item #end,
"surveyOne": "$inputRoot.surveyOne",
"surveyOneAnswer": "$inputRoot.surveyOneAnswer",
"surveyTwo": "$inputRoot.surveyTwo",
"surveyTwoAnswer": "$inputRoot.surveyTwoAnswer"
}
Содержимое AWS Lambda (Node JS) для получения параметров и их сохранения в DynamoDB:
const params = {
Item: {
'uuid': { S: "i_" + uuidv4() },
'name': { S: event.name },
'profileImage': { S: event.profileImage },
'gender': { S: event.gender },
'interests': { SS: event.interests },
'surveys' : {
L: [
{
M: {
'type': { S: event.surveyOne },
'answer': { S: event.surveyOneAnswer },
},
M: {
'type': { S: event.surveyTwo },
'answer': { S: event.surveyTwoAnswer }
}
}
]
}
},
TableName: 'users'
};
dynamodb.putItem(params, (err, data) => {
if (err) {
const response = {
statusCode: 500,
headers: {
'Access-Control-Allow-Origin': '*'
},
body: JSON.stringify({status: false})
};
return callback(null, response);
}
// return status 200 if success
const response = {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*'
},
body: JSON.stringify({status: 'A new record has been added'})
};
return callback(null, response);
})
Но сохраненный элемент в базе данных Dynamo содержит один опрос , который является surveyTwo .Это должно быть 2, потому что я передал surveyOne и surveyTwo, введите и ответ.
Мой ожидаемый результат должен быть
{
"name": "John Doe",
"profileImage": "https://example.com",
"gender": "m",
"interests": ["Basketball", "Swimming"],
"surveys": [
{ "type": "question 1", "answer": "answer to question 1" },
{ "type": "question 2", "answer": "answer to question 2" }
]
}