DynamoDB GetItem di Node.js (AWS SDK v3)
AWS SDK v3 memberi Anda dua cara membaca satu item: GetItemCommand pada DynamoDBClient, yang berbicara format wire ({S: '...'}), atau GetCommand pada DynamoDBDocumentClient, yang menerima dan mengembalikan JavaScript biasa.
Contoh ini memakai client tingkat rendah. Pembungkus itulah wujud sebenarnya dari enkoding attribute value di wire, dan itulah yang dikutip pesan error kembali kepada Anda. Bagaimanapun caranya, permintaan itu butuh primary key lengkap.
Kode
import {DynamoDBClient, GetItemCommand} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({region: 'us-east-1'});
const command = new GetItemCommand({
TableName: 'Music',
Key: {
Artist: {S: 'Arturo Sandoval'},
SongTitle: {S: 'Cubano Chant'}
},
ProjectionExpression: '#proj0, #proj1, #proj2, #proj3',
ExpressionAttributeNames: {
'#proj0': 'Artist',
'#proj1': 'SongTitle',
'#proj2': 'AlbumTitle',
'#proj3': 'Year'
}
});
const response = await client.send(command);
if (!response.Item) {
console.log('Item not found');
} else {
console.log(response.Item);
}Penjelasan
send(command), bukanclient.getItem()—DynamoDBClienthanya mengekspossend. Kelas agregatDynamoDBdari paket yang sama memang membawa methodgetItemkalau Anda ingin gaya panggilan SDK v2, dengan harga menarik setiap command ke dalam bundle Anda.- Meleset berarti
undefined, bukan sebuah error —response.Itemsekadar tidak ada, dan panggilannya tetap resolve.response.$metadataselalu datang, jadi memeriksa truthiness pada responsnya sendiri tidak memberi tahu Anda apa pun. unmarshallmemilih tipe angka berdasarkan besarannya —{N: …}di dalam rentang safe-integer kembali sebagainumber, apa pun di luarnya sebagaiBigInt, dan non-integer yang besar melemparcan't be converted to BigInt. Berikan{wrapNumbers: true}keunmarshalldari@aws-sdk/util-dynamodbdan setiap angka justru datang sebagaiNumberValue, sehingga Anda yang memutuskan konversinya.- Alias
#projitu menentukan —Yearada di daftar kata reserved milik AWS, jadiProjectionExpressionyang menyebutnya langsung akan ditolak. Memberi alias pada setiap nama, seperti di atas, adalah default yang aman. Ia memangkas responsnya, bukan biaya bacanya (alasannya). ConsumedCapacitybersifat opt-in — tambahkanReturnConsumedCapacity: 'TOTAL'dan responsnya melaporkan berapa biaya pembacaan ini sebenarnya: 0,5 unit kapasitas untuk pembacaan eventually consistent atas item di bawah 4 KB, 1,0 begitu Anda menambahkanConsistentRead: true(kompromi-nya).- Angkat client-nya ke atas — bangun
DynamoDBClientsekali di scope modul. Membangun satu per permintaan, atau di dalam handler Lambda, membuang connection pool dan kredensial yang sudah di-resolve pada setiap panggilan.
Lakukan secara visual
DynoTable menampilkan item sebagai baris biasa alih-alih map attribute-value, dan mengekspor query di balik grid itu sebagai program SDK v3 yang bisa dijalankan. Unduh DynoTable.
Panduan terkait
- Query vs. Scan — kapan satu
GetItemmengalahkanQuery. - Cara kerja partition key DynamoDB — mengapa
GetItembutuh key lengkap. - DynamoDB ResourceNotFoundException — error pertama yang biasa muncul di sini: nama tabel atau Region salah.
- "The provided key element does not match the schema" — key yang Anda berikan tidak cocok dengan key schema tabel.
Referensi
- GetItem — Amazon DynamoDB API Reference
- GetItemCommand — AWS SDK for JavaScript v3 Reference
- Read consistency — Amazon DynamoDB Developer Guide
- Capacity unit consumption — Amazon DynamoDB Developer Guide
- @aws-sdk/lib-dynamodb — large numbers and
NumberValue
Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.