Несмотря на то, что DynamoDB является хранилищем документов без схемы, требуется, чтобы вы объявили тип данных, которые хранятся в полях элемента.
Ваш код должен выглядеть следующим образом:
const aws = require('aws-sdk');
const ddb = new aws.DynamoDB();
const Item = {
date: {N: Date.now()},
message: {S: event.body},
ID: {S: inputttt},
a: {M: {
"id":{S: "123456"},
"data":{L: [ {M: {"mac":{S: "1231"}}} ]}
}}
};
const TableName = 'wifi';
ddb.putItem({Item, TableName}, (err, data) => { ... })
В приведенном выше коде каждое свойство Item
является объектом, отображающим тип в значение. Например, date - это числовой тип с {N: Date.now}
; a
- это объект или карта с {M: {"id" ... }}
, а id
- строка с {S: '123456'}
.
Код выше делает некоторые предположения о типах. Вы должны убедиться, что выбранные мной типы соответствуют вашим данным. (Например, предполагается, что event.body
и inputttt
являются строками.)
Я думаю, что у Вас есть причина. Я делаю это тот путь, таким образом, я не должен волноваться об имени класса и могу просто скопировать и вставить шаблонный код в новом классе.
Для официального ответа см.: Как я получаю полностью определенное название класса в статическом блоке? в log4net часто задаваемых вопросах
Как Вы говорите - его удобное, поскольку можно создать регистратор в методе, не зная название класса (тривиальный, я знаю), но позволяет Вам вырезать и вставлять методы между классами, не имея необходимость переименовывать вызов.