使用带有 Node.js 的 Lambda 函数更新 DynamoDB table

Update DynamoDB table using Lambda Function with Node.js

我正在尝试更新包含 ID 0c876d54-195a-46d1-954c-80477e78e70e 的现有 DynamoDB table 记录并将 status 列从 true 设置为 false .我正在使用带有 Node.js 的 Lambda 函数来执行更新。函数 returns null 似乎很少有文档来执行如此简单的任务。这是我尝试过的:

const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient({ region: 'us-east-1' });
exports.handler = async(event, context, callback) => {
    await updateTable().then(() => {
        callback(null, {
            statusCode: 201,
            body: '',
            headers: {
                'Access-Control-Allow-Origin': '*'
            }
        });
    }).catch((err) => {
        console.error(err)
    })
};

function updateTable() {
    const params = {
        TableName: "MyTable",
            Key: {
        "ID": "0c876d54-195a-46d1-954c-80477e78e70e"
    },
        UpdateExpression: "SET status = :status",
        ExpressionAttributeValues: {
            ":status": "FALSE"
        }
    }
    return ddb.update(params).promise();
}

在使用 async 时不要使用 .then().catch()callback 模式。当您使用 async Lambda 将在代码路径完成后立即退出,这将在您点击 .then().

之前
const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient({ region: 'us-east-1' });
exports.handler = async(event, context) => {
    try {
        await updateTable();

        return {
            statusCode: 201,
            body: '',
            headers: {
                'Access-Control-Allow-Origin': '*'
            }
        }
    }
    catch (err) {
        console.error(err);
    }
};

function updateTable() {
    const params = {
        TableName: "MyTable",
            Key: {
        "ID": "0c876d54-195a-46d1-954c-80477e78e70e"
    },
        UpdateExpression: "SET status = :status", //status is a reserved ATTRIBUTE
        ExpressionAttributeValues: {
            ":status": "FALSE"
        }
    }
    return ddb.update(params).promise();
}