const AWS = require('aws-sdk')
const docClient = new AWS.DynamoDB.DocumentClient({ region: 'eu-central-1' })
const createDocument = (text, callback) => {
const createParams = {
Item: {
text: text
},
TableName: 'ToDoItems'
}
docClient.put(createParams, (err, data) => {
if(err) {
callback(err, null)
} else {
callback(null, data)
}
})
}
exports.handle = (event, context, callback) => {
createDocument(event.text, (err, data) => {
if(err) {
callback(err, null)
} else {
callback(null, data)
}
})
}
这是我的AWS Lambda函数,问题是当我收到回调时,data
对象为空,即使文档已插入DynamoDB。这可能是什么问题?
答案 0 :(得分:7)
你做不到。你必须单独查询。在put
,如果您设置了ReturnValues: 'ALL_NEW'
,那么您将获得"ReturnValues can only be ALL_OLD or NONE"
请注意AWS文档中的“可能”:
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#put-property
ReturnValues - (字符串)可能的值包括:
- “无”
- “ALL_OLD”
- “UPDATED_OLD”
- “ALL_NEW”
- “UPDATED_NEW”
此外,您还可以使用params值,而不是单独查询。如果它已保存,那么你在createParams.Item中所拥有的基本上就是你要单独查询时返回的内容。
答案 1 :(得分:2)
有一种解决方法 - 您可以使用DynamoDB.DocumentClient的更新方法。
TableName: "table",
Key: {
id: randomId
},
AttributeUpdates: {
authorId: {Action: "PUT", Value: event.authorId},
date: {Action: "PUT", Value: event.date},
description: {Action: "PUT", Value: event.description},
title: {Action: "PUT", Value: event.title}
},
ReturnValues: "ALL_NEW"
此方法将创建新项目并返回您需要的所有内容
答案 2 :(得分:0)
您必须请求返回值,如下所示:
const createParams = {
Item: {
text: text
},
TableName: 'ToDoItems',
ReturnValues: 'ALL_NEW'
}
记录在案here。
答案 3 :(得分:0)
我确实必须实现.then()
中的返回值是params.Item,如下所示:
var params = {
TableName:table,
Item:{
"name": value,
"email": value2,
}
};
console.info("Adding a new item...");
await docClient.put(params)
.promise()
.then(data => {
return params.Item;
}).catch(error => {
console.error(error)
throw new Error(error)
})