Lambda上的AWS DynamoDB不返回插入的数据

时间:2017-02-08 16:32:41

标签: javascript amazon-web-services amazon-dynamodb aws-lambda

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。这可能是什么问题?

4 个答案:

答案 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)
    })