Querying dynamo table with @aws-sdk/lib-dynamodb

I’m trying to query a DynamoDB table in AWS, from a lambda written in Node.js.

// db.js

const { DynamoDBClient } = require('@aws-sdk/client-dynamodb');
const { QueryCommand } = require('@aws-sdk/lib-dynamodb');
const ddbClient = new DynamoDBClient({ region: 'us-east-1' });

try {
    const params = {
      TableName: process.env.TABLE_NAME,
      ExpressionAttributeValues: { ':userEmail': `${userEmail}` },
      ExpressionAttributeNames: { '#userEmail': 'user_email' },
      // KeyConditionExpression: 'user_email = :userEmail', <--- also tried like this
      KeyConditionExpression: '#userEmail = :userEmail',
    };

    console.warn(params);

    return await ddbClient.send(new QueryCommand(params));
  } catch (error) {
    console.error(`With ${userEmail}`, error);

    throw error;
  }

The logs:

{
TableName: ‘contacts’,
ExpressionAttributeValues: { ‘:userEmail’: ‘justatest@email.com‘ },
ExpressionAttributeNames: { ‘#userEmail’: ‘user_email’ },
KeyConditionExpression: ‘#userEmail = :userEmail’
}

With justatest@email.com
ValidationException: Invalid KeyConditionExpression: Syntax error;
token: “<EOF>”, near: “= “

I don’t know where to look anymore, this query is too simply, so my mistake must be too.

Read more here: Source link