使用API​​网关创建DynamoDB的更新请求时感到困惑

时间:2017-08-21 18:33:09

标签: amazon-dynamodb aws-lambda aws-api-gateway

我正在写一个lambda函数来通过发布电话号码来获取资源。下面是我的代码。

exports.handle = function (e, ctx, cb) {
    var body = JSON.parse(e.body);
    var params = {
        TableName: 'userAddresses',
        FilterExpression: '#phone = :phone',
        ExpressionAttributeNames: {
            "#phone": "phone"
        },
        ExpressionAttributeValues: {
            ":phone": body.phone
        }
    }
    dynamodb.scan(params).promise().then(function (data) {
        var uw = data.Items[0];
        var res = {
            "statusCode": 200,
            "headers": {},
            "body": JSON.stringify(uw)
        };
        ctx.succeed(res);
    });
}

这很好用。但我想用put和patch做同样的事情。有人可以指出我正确的方向。

对于补丁,它应该是这样的,phone应该作为queryParameter传递,而身体只需要在json体中更新

由于

1 个答案:

答案 0 :(得分:0)

电话号码是否为哈希键?如果是这样,请使用dynamodb.get()或dynamodb.query()代替......

这是一个快速而肮脏的示例,它可以帮助您开始使用DynamoDB更新:

const AWS      = require('aws-sdk);
const bluebird = require('bluebird');

AWS.config.setPromisesDependency(bluebird);

const dynamodb = new AWS.DynamoDB.DocumentClient();

let update = (id, attributes) => {
  var params = {
    TableName: 'MyTableName',
    Key: {
      myHashKeyAttr: id
    },
    AttributeUpdates: attributes
  };

  return dynamodb.update(params).promise();
};

exports.handler = (event, context, callback) => {
  console.log(JSON.stringify(event, null, 2));
  let body = JSON.parse(event.body);

  let attributes = {
    firstName: {
      Action: 'PUT',
      Value: body.firstName
    },
    lastName: {
      Action: 'PUT',
      Value: body.lastName
    },
    updatedAt: {
      Action: 'PUT',
      Value: new Date()
    }
  }; 

  // only if the phone number is a hash key...
  update(event.queryStringParameters.phone, attributes)
    .then(

      (result) => {
        console.log(result);
        callback({
          statusCode: 200,
          headers: {},
          body: JSON.stringify({message: 'updated!'})
        });
      }

    ).catch(

      (error) => {
        console.error(error);
        callback({
          statusCode: 500,
          headers: {},
          body: JSON.stringify({message: 'ops!'})
        });
      }

    );
}