Я абсолютно новичок в DynamoDb и пытаюсь просто написать объект из NodeJS Lambda. Исходя из того, что я прочитал и исследовал, я, вероятно, должен использовать DocumentClient
из aws-sdk
. Я также нашел следующий вопрос , касающийся проблем с DocumentClient, но он, похоже, не решает мою конкретную проблему c .... которую я, к сожалению, не могу найти / определить. Я настроил отладчик, чтобы помочь с локальной разработкой SAM, но, похоже, он выдает только некоторые ошибок.
Реализация кода показана здесь.
var params = {
TableName: "March-Madness-Teams",
Item: {
"Id": {"S": randstring.generate(9)},
"School":{"S": team_name},
"Seed": {"S": seed},
"ESPN_Id": {"S": espn_id}
}
}
console.log(JSON.stringify(params))
dynamodb.put(params, (error,data) => {
if (error) {
console.log("Error ", error)
} else {
console.log("Success! ", data)
}
})
В основном я вычищаю веб-сайт, используя библиотеку cheerio и вишню, выбирая значения из DOM и сохраняя их в объекте json, показанном ниже.
{
"TableName": "March-Madness-Teams",
"Item": {
"Id": {
"S": "ED311Oi3N"
},
"School": {
"S": "BAYLOR"
},
"Seed": {
"S": "1"
},
"ESPN_Id": {
"S": "239"
}
}
}
Когда я пытаюсь сделать sh этот json объект для "Динамо", я получаю сообщения об ошибках:
Error MultipleValidationErrors: There were 2 validation errors:
* MissingRequiredParameter: Missing required key 'TableName' in params
* MissingRequiredParameter: Missing required key 'Item' in params
Вышеприведенная ошибка хороша хорошо ... Полагаю, мне не понравился тот факт, что я обернул их в ключи строк, поэтому я удалил кавычки и отправил следующее
{
TableName: "March-Madness-Teams",
Item: {
"Id": {
"S": "ED311Oi3N"
},
"School": {
"S": "BAYLOR"
},
"Seed": {
"S": "1"
},
"ESPN_Id": {
"S": "239"
}
}
}
Однако, когда я это делаю ... я ничего не получаю.
Вот фрагмент кода большего размера.
return new Promise((resolve,reject) => {
axios.get('http://www.espn.com/mens-college-basketball/bracketology')
.then(html => {
const dynamodb = new aws.DynamoDB.DocumentClient()
let $ = cheerio.load(html.data)
$('.region').each(async function(index, element){
var preregion = $(element).children('h3,b').text()
var region = preregion.substr(0, preregion.indexOf('(') - 1)
$(element).find('a').each(async function(index2, element2){
var seed = $(element2).siblings('span.rank').text()
if (seed.length > 2){
seed = $(element2).siblings('span.rank').text().substring(0, 2)
}
var espn_id = $(element2).attr('href').split('/').slice(-2)[0]
var team_name = $(element2).text()
var params = {
TableName: "March-Madness-Teams",
Item: {
"Id": randstring.generate(9),
"School":team_name,
"Seed": seed,
"ESPN_Id": espn_id
}
}
console.log(JSON.stringify(params))
// dynamodb.put(params)
// .then(function(data) {
// console.log(`Success`, data)
// })
})
})
})
})