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), bukan client.getItem()DynamoDBClient hanya mengekspos send. Kelas agregat DynamoDB dari paket yang sama memang membawa method getItem kalau Anda ingin gaya panggilan SDK v2, dengan harga menarik setiap command ke dalam bundle Anda.
  • Meleset berarti undefined, bukan sebuah errorresponse.Item sekadar tidak ada, dan panggilannya tetap resolve. response.$metadata selalu datang, jadi memeriksa truthiness pada responsnya sendiri tidak memberi tahu Anda apa pun.
  • unmarshall memilih tipe angka berdasarkan besarannya{N: …} di dalam rentang safe-integer kembali sebagai number, apa pun di luarnya sebagai BigInt, dan non-integer yang besar melempar can't be converted to BigInt. Berikan {wrapNumbers: true} ke unmarshall dari @aws-sdk/util-dynamodb dan setiap angka justru datang sebagai NumberValue, sehingga Anda yang memutuskan konversinya.
  • Alias #proj itu menentukanYear ada di daftar kata reserved milik AWS, jadi ProjectionExpression yang menyebutnya langsung akan ditolak. Memberi alias pada setiap nama, seperti di atas, adalah default yang aman. Ia memangkas responsnya, bukan biaya bacanya (alasannya).
  • ConsumedCapacity bersifat opt-in — tambahkan ReturnConsumedCapacity: '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 menambahkan ConsistentRead: true (kompromi-nya).
  • Angkat client-nya ke atas — bangun DynamoDBClient sekali 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

Referensi

Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.