【发布时间】:2020-03-01 13:06:11
【问题描述】:
我对 DynamoDb 绝对是全新的,我正在尝试简单地从 NodeJS Lambda 编写一个对象。根据我阅读和研究的内容,我可能应该使用来自aws-sdk 的DocumentClient。关于 DocumentClient 的问题,我还发现了以下question here,但它似乎并没有解决我的具体问题......不幸的是,我无法真正找到/确定。我已经设置了一个调试器来帮助进行 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"
}
}
}
当我尝试将此 json 对象推送到 Dynamo 时,出现错误提示
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"
}
}
}
但是,当我这样做时……我什么也得不到。
这是一个更大的代码sn-p。
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)
// })
})
})
})
})
【问题讨论】:
-
看起来不错,只需再次检查您的调试点和aws文档示例docs.aws.amazon.com/amazondynamodb/latest/developerguide/…
-
你能显示更多的代码吗?根据您的其中一个 cmets,听起来您可能正在将异步与回调结合起来。
-
好了,@JasonWadsworth。用更多的源代码编辑了原始帖子。
-
这是在网页上运行,还是 NodeJS 服务器?
-
它现在只是一个 lambda 函数,但将支持网页。
标签: node.js amazon-dynamodb aws-sdk