AWS.DynamoDB.DocumentClient未提供有关put的数据

时间:2016-07-20 15:51:49

标签: node.js amazon-web-services amazon-dynamodb

我正在使用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变量是一个空对象。不应该包含值吗?

由于

3 个答案:

答案 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无法识别NONEALL_OLD以外的任何值。

这实际上意味着沃尔特·怀特(Walter White)的回答,即除非对现有项目进行更新,否则不会返回任何内容。