Как обновить в AWS DynamoDb в NodeJs? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть код, который обновляет существующий элемент AWS DynamoDb,
Я использую метод обновления AWS DynamoDb SDK,
Я получаю сообщение об ошибке при обновлении элемента -

{ ValidationException: ExpressionAttributeValues contains invalid key: Syntax error; key: "tamt"
message: 'ExpressionAttributeValues contains invalid key: Syntax error; key: "tamt"',
  code: 'ValidationException',
  statusCode: 400,
  retryable: false,

Ниже мой код -

module.exports.updateCart = async (constants, connection, requestBody) => {
    let table = constants.tables.user_cart;

    let params = {
        TableName: table,
        Key:{
            "cart_id": requestBody.cart_id
        },
        UpdateExpression: "set currency = :curr, product_type = :ptype, total_amount = :tamt,"
        +"total_quantity = :tqty, created_date = :cdate, expiry = :exp, items = :items",
        ExpressionAttributeValues:{
            "curr": requestBody.currency,
            "ptype": requestBody.product_type,
            "tamt": requestBody.total_amount,
            "tqty": requestBody.total_quantity,
            "cdate": requestBody.created_date,
            "exp": requestBody.expiry,
            "items" : requestBody.items
        },
        ReturnValues:"UPDATED_NEW"
    };
    console.log("Params => \n", params);

    let update = util.promisify(connection.update).bind(connection);
    let results = await update(params);
    return results;
}

Ниже приводится консольный журнал параметров -

{
    TableName: 'someTable',
    Key: {
        cart_id: 'someId'
    },
    UpdateExpression: 'set currency = :curr, product_type = :ptype, total_amount = :tamt, total_quantity = :tqty, created_date = :cdate, expiry = :exp, items = :items',
    ExpressionAttributeValues: {
        curr: 'USD',
        ptype: 'SPECIAL',
        tamt: 50,
        tqty: 1,
        cdate: 1558499016,
        exp: 1558499016,
        items: items: [{
            name: 'someName',
            amount: 50,
            quantity: 1,
            category: 'some Category'
        }]
    },
    ReturnValues: 'UPDATED_NEW'
}

RequestBody -

{
    product_type: 'SPECIAL',
    user_id: 1234,
    total_amount: 50,
    total_quantity: 1,
    currency: 'USD',
    items: [{
        name: 'someName',
        amount: 50,
        quantity: 1,
        category: 'some Category'
    }],
    created_date: 1558499016,
    expiry: 1558499016,
    cart_id: 'someId'
}

Я дважды проверил, поле total_amount в таблице имеет тип Number,
В чем может быть проблема?

Ссылка -
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.03.html#GettingStarted.NodeJs.03.03

1 Ответ

1 голос
/ 22 мая 2019

ключи в ExpressionAttributeValues должны начинаться с :

ExpressionAttributeValues:{
        ":curr": requestBody.currency,
        ":ptype": requestBody.product_type,
        ":tamt": requestBody.total_amount,
        ":tqty": requestBody.total_quantity,
        ":cdate": requestBody.created_date,
        ":exp": requestBody.expiry,
        ":items" : requestBody.items
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...