【问题标题】:How to update DynamoDB item using AWS Lambda and Axios如何使用 AWS Lambda 和 Axios 更新 DynamoDB 项目
【发布时间】:2020-06-14 21:18:40
【问题描述】:

我正在尝试使用 Lambda 更新 DynamoDB 表项,当值被硬编码时,下面的代码可以正常工作。

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: "us-east-1"});

    exports.handler = (event, callback) => {
        const params = {
            Key: {
                date: event.key1,
            },
            TableName: "todo-app",
            UpdateExpression:"SET task=:t",
            ExpressionAttributeValues:{":t":"This is my updated table"},
            ReturnValues:"UPDATED_NEW"
        };

        docClient.update(params, function(err, data) {
            if (err) {
                console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
            } else {
                console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
            }
        });
    };

但是,这将始终使用“这是我更新的表”的硬编码值更新字段。

有没有办法可以像这样简单地将“这是我更新的表格”替换为 event.key2

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: "us-east-1"});

    exports.handler = (event, callback) => {
        const params = {
            Key: {
                date: event.key1,
            },
            TableName: "todo-app",
            UpdateExpression:"SET task=:t",
            ExpressionAttributeValues:{":t":event.key2},
            ReturnValues:"UPDATED_NEW"
        };

        docClient.update(params, function(err, data) {
            if (err) {
                console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
            } else {
                console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
            }
        });
    };

这里是 axios 函数以防万一:

  async handleEdit(){
    let task = prompt("Enter texty");

    await axios.post(
      'https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/default/serverlessToDoFunctionUPDATE',
      { key1: 1591926275608 },
      { key2: task },
    );
  };

我知道这对你们中的一些人来说可能听起来是一个愚蠢的问题,但我似乎找不到一个简单的工作示例。

如果能提供任何帮助,我将不胜感激。谢谢。

【问题讨论】:

  • 您似乎没有提到实际上有一个 API 网关正在调用 Lambda 函数。这是至关重要的信息。您需要添加更多关于 API Gateway 和 Lambda 之间的集成是如何配置的信息。
  • 抱歉,我没有意识到这是相关的。 API Gateway 连接到这个 lambda 函数,并且它与 axios API 调用配合得很好。究竟需要哪些信息?

标签: reactjs aws-lambda axios amazon-dynamodb


【解决方案1】:

我才意识到我做错了什么。也许我一开始就让我的问题太复杂了。我通过将 event.key2 值放在花括号中解决了这个问题,如下所示:

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: "us-east-1"});

    exports.handler = (event, callback) => {
        const params = {
            Key: {
                date: event.key1,
            },
            TableName: "todo-app",
            UpdateExpression:"SET task=:t",
            ExpressionAttributeValues:{":t":`${event.key2}`},
            ReturnValues:"UPDATED_NEW"
        };

        docClient.update(params, function(err, data) {
            if (err) {
                console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
            } else {
                console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
            }
        });
    };

并像这样正确格式化 axios API 调用:

  async handleEdit(){
    let task = prompt("Enter texty");

    await axios.post(
      'https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/default/serverlessToDoFunctionUPDATE',
      { key1: 1591926275608, key2: task }
    );
  };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2016-12-07
    相关资源
    最近更新 更多