Как записать элемент в 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()
};