我正在使用AWS.DynamoDB.DocumentClient,其中Dynamodb是本地的(端口8080)。当我执行put时,回调中的data
变量是一个空对象。我错过了什么吗?
import * as AWS from "aws-sdk";
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8080"
});
const docClient: any = new AWS.DynamoDB.DocumentClient();
const item = {
someField: "456",
other: "123"
};
const params = {
TableName: "TableName",
Item: item
};
docClient.put(params, function(err, data) {
if (err) console.log(err);
else console.log(data); // this produces: {}
});
没有错误,项目正在插入\更新 - 但data
变量是一个空对象。不应该包含值吗?
由于
答案 0 :(得分:3)
你不是要求任何价值回来,所以你为什么期望有任何价值回来?如果您希望任何参数返回到响应中,则需要设置相应的参数ReturnConsumedCapacity
和/或ReturnItemCollectionMetrics
和/或ReturnValues
。
答案 1 :(得分:1)
您无法为" ReturnValues"设置值。实际上返回任何有用的东西,我通过简单地传回传入的原始项数据来解决它。
import * as AWS from "aws-sdk";
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8080"
});
const docClient: any = new AWS.DynamoDB.DocumentClient();
const item = {
someField: "456",
other: "123"
};
const params = {
TableName: "TableName",
Item: item
};
// Have a clear reference to this scope
var self = this;
docClient.put(params, function(err, data) {
if (err) console.log(err);
else console.log(self.params.Item); // this should return the data you passed in!
});
我设置" self"作为"这"清楚地说明我从哪里读取数据。希望能帮助别人!
答案 2 :(得分:0)
稍微澄清一下接受的答案。
将返回值设置为:
var params = {
Item: data,
TableName: 'myTable',
ReturnValues: 'ALL_OLD'
}
docs指定:
NONE
-如果未指定ReturnValues,或者其值为NONE,则不返回任何内容。 (此设置是ReturnValues的默认设置。)
ALL_OLD
-如果PutItem覆盖了属性名称-值对,那么将返回旧项目的内容。
注意:ReturnValues参数由几个DynamoDB操作使用;但是,PutItem无法识别NONE
或ALL_OLD
以外的任何值。
这实际上意味着沃尔特·怀特(Walter White)的回答,即除非对现有项目进行更新,否则不会返回任何内容。