最近、AWS SDK nodejsをバージョン3へアップデートしているのですが、そこでエラーに遭遇したのでメモしておきます。
v2ではDynamoDB
の処理はこのように書いていました。
var params = {
TableName: 'Table',
IndexName: 'Index',
KeyConditionExpression: 'HashKey = :hkey and RangeKey > :rkey',
ExpressionAttributeValues: {
':hkey': 'key',
':rkey': 2015
}
};
var documentClient = new AWS.DynamoDB.DocumentClient();
documentClient.query(params, function(err, data) {
if (err) console.log(err);
else
v3でも対して変わらないだろうと思って、こんなふうに書いたらエラーに遭遇。
TypeError: Cannot read property '0' of undefined
const params = {
TableName: 'Table',
IndexName: 'Index',
KeyConditionExpression: 'HashKey = :hkey and RangeKey > :rkey',
ExpressionAttributeValues: {
':hkey': 'key',
':rkey': 2015
}
};
const command = new QueryCommand(params);
const data = await dynamoDBClient.send(command);
どうもv3からは値を渡すときは、タイプを指定してオブジェクトを渡す必要があるみたいです。
なので、このように修正します。
const params = {
TableName: 'Table',
IndexName: 'Index',
KeyConditionExpression: 'HashKey = :hkey and RangeKey > :rkey',
ExpressionAttributeValues: {
':hkey': { S: 'key'},
':rkey': { N: '2015'}
}
};
const command = new QueryCommand(params);
const data = await dynamoDBClient.send(command);