Как записать элемент в DynamoDb с помощью AWS DynamoDB DocumentClient?

У меня проблемы с AWS DynamoDb JS SDK v2.4.9. Я хочу использовать класс DocumentClient, а не класс DynamoDb более низкого уровня, но не могу заставить его работать.

Это работает:

function testPutItem( callback ) {

    var tableName = 'todos';

    var params = {
        TableName: tableName,
        Item: {
            user_id: { S : userId },
            id: { N : msFromEpoch },        // ms from epoch
            title: { S : makeRandomStringWithLength(16) },
            completed: { BOOL: false }
        }
    };

    var dynamodb = new AWS.DynamoDB();
    dynamodb.putItem(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else {
            console.log(data);           // successful response
            if (callback) callback(data);
        }
    });
}

Это не работает и выдает ошибку InvalidParameterType: Expected params.Item[attribute] to be a structure для каждого атрибута - как будто DocumentClient ожидает того же ввода, что и DynamoDb:

function testPutItem( callback ) {

    var tableName = 'todos';

    var params = {
        TableName: tableName,
        Item: {
            user_id: userId,
            id: msFromEpoch,
            title: makeRandomStringWithLength(16),
            completed: false
        }
    };
    console.log(params);

    var docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
    docClient.put(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else {
            console.log(data);           // successful response
            if (callback) callback(data);
        }
    });
}

Кто-нибудь знает, что я делаю не так?

1 ответ

Раньше у меня была такая же проблема,

пожалуйста, попробуйте сначала с простым объектом, потому что это связано с некоторыми специальными символами в ваших атрибутах, см. мой пример:

это порождает ошибку

InvalidParameterType: ожидается, что params.Item[attribute] будет структурой

 var Item = {
  domain: "knewtone.com",
  categorie: "<some HTML Object stuff>",
  title: "<some HTML stuff>",
  html: "<some HTML stuff>""
};

но когда я заменяю материал HTML форматированным HTML, простыми символами, это работает

var Item = {
  domain: "knewtone.com",
  categorie: $(categorie).html(),
  title: $(title).html(),
  html: $(html).html()
};
Другие вопросы по тегам