ValidationException:ExpressionAttributeValues 包含无效键

问题描述 投票:0回答:1

我尝试在查询中使用 FilterExpression 过滤 DynamoDB 表扫描的结果。我正在使用部署在 AWS 上的 API Gateway 上的 Lambda 函数。

查询端点的函数

// Scan the table for entries and use data to populate HTML table.
async function scanTable(){
  
    var query = {
        TableName: "bookings",
        ProjectionExpression: "id, username, start_booking, end_booking",
        FilterExpression: "username = :u",
        ExpressionAttributeValues: {":u":"[email protected]"}
    };

    try{      
        const response = await axios({ method: 'get', url: `${url}/bookings`, params: query });    
    }catch(err){
        console.log(err);
    }
}

Lambda 函数

'use strict'
const AWS = require('aws-sdk');


exports.handler = async (event, context) => {
    const documentClient = new AWS.DynamoDB.DocumentClient({convertEmptyValues: true});

    let responseBody = "";
    let statusCode = 0;

    const params = (event.queryStringParameters);
    // console.log(params);
    
    try{
        const data = await documentClient.scan(params).promise();
        responseBody = JSON.stringify(data.Items);
        statusCode = 200;
    }catch(err){
        responseBody = `Unable to get the bookings: ${err}`;
        statusCode = 403;
    }
    
    console.log("Response Body: " + responseBody);

    const response = {
        statusCode: statusCode,
        headers: {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*"
        },
        body: responseBody
    };
    
    

    return response;
}

我收到的完整错误是

ValidationException: ExpressionAttributeValues contains invalid key: Syntax error; key: "11"

错误末尾的键值(键:“11”)在某种程度上取决于在 ExpressionAttributeValues 中分配的值。我尝试按照 DynamoDB 文档中的 FilterExpression 示例进行扫描功能,但无济于事。这是另一个示例

这里是来自AWS论坛的类似问题。

javascript aws-lambda aws-api-gateway amazon-dynamodb
1个回答
0
投票

我认为你应该将 ExpressionAttributeValues 修改为:

var query = {
    TableName: "bookings",
    ProjectionExpression: "id, username, start_booking, end_booking",
    FilterExpression: "username = :u",
    ExpressionAttributeValues: { 'S': "[email protected]" }
};
© www.soinside.com 2019 - 2024. All rights reserved.