DynamoDB Не могу вставить ничего, кроме Key - PullRequest
0 голосов
/ 18 марта 2020

Я экспериментирую с DynamoDB, чтобы вставить некоторые данные в таблицу test-table. С почтальоном и лямбдой я пытаюсь вставить некоторые значения.

В настоящее время в моей таблице есть Key с именем node, и если я пытаюсь вставить новую запись, в теле работает следующее:

 {
    "TableName": "test-table",
        "Key": {"note":"test node"}
}

Однако я хочу добавить некоторые новые данные в мою запись, например:

 {
    "TableName": "test-table",
        "Key": {"note":"test node"},
        "Title": "This is a test"
}

Но при этом не сохраняется второе свойство Title, только ключ спасаться Что мне здесь не хватает?

Вот мой лямбда-код, который получает данные с помощью API Gateway:

const AWS = require('aws-sdk');

const dynamo = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event, context) => {
    //console.log('Received event:', JSON.stringify(event, null, 2));

    let body;
    let statusCode = '200';
    const headers = {
        'Content-Type': 'application/json',
    };

    try {
        switch (event.httpMethod) {
            case 'DELETE':
                body = await dynamo.delete(JSON.parse(event.body)).promise();
                break;
            case 'GET':
                body = await dynamo.scan({ TableName: event.queryStringParameters.TableName }).promise();
                break;
            case 'POST':
                body = await dynamo.put(JSON.parse(event.body)).promise();
                break;
            case 'PUT':
                body = await dynamo.update(JSON.parse(event.body)).promise();
                break;
            default:
                throw new Error(`Unsupported method "${event.httpMethod}"`);
        }
    } catch (err) {
        statusCode = '400';
        body = err.message;
    } finally {
        body = JSON.stringify(body);
    }

    return {
        statusCode,
        body,
        headers,
    };
};

1 Ответ

1 голос
/ 18 марта 2020

При использовании клиента документов DynamoDB ваш код в конечном итоге должен выглядеть следующим образом:

const params = { "TableName": "test-table", "Item": { "note": "test", "title": "fred" }};
const rc = await dynamo.put(params).promise();

Обратите особое внимание на то, что атрибуты верхнего уровня в params, которые вы передаете методу put(), TableName и Item, а не TableName и Key. Поэтому убедитесь, что ваше проанализированное тело HTTP соответствует этому.

Кроме того, поскольку ваш клиент (веб-страница) фактически предоставляет имя таблицы для вашей функции Lambda, обязательно защитите это приложение от Замешанная проблема заместителя , когда кто-то взламывает тело HTTP для ссылки на другую таблицу, например employees или students.

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