Programmazione di Amazon DynamoDB con JavaScript - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Programmazione di Amazon DynamoDB con JavaScript

Questa guida fornisce una guida ai programmatori che desiderano utilizzare Amazon DynamoDB con. JavaScript Scopri i livelli di astrazione disponibili AWS SDK for JavaScript, la configurazione delle connessioni, la gestione degli errori, la definizione delle politiche di ripetizione dei tentativi, la gestione del keep-alive e altro ancora.

Informazioni su AWS SDK for JavaScript

AWS SDK for JavaScript Fornisce l'accesso all' Servizi AWS utilizzo degli script del browser o di Node.js. Questa documentazione si concentra sull’ultima versione dell’SDK (V3). La AWS SDK for JavaScript V3 è gestita da AWS come progetto open source ospitato su. GitHub I problemi e le richieste di funzionalità sono pubblici e puoi accedervi nella pagina dei problemi del repository. GitHub

JavaScript La V2 è simile alla V3, ma contiene differenze di sintassi. V3 è più modulare, facilita la distribuzione di dipendenze più piccole e offre un supporto di prima classe. TypeScript Si consiglia di utilizzare sempre la versione più recente dell’SDK.

Utilizzo della V3 AWS SDK for JavaScript

È possibile aggiungere l’SDK all’applicazione Node.js tramite Node Package Manager. Gli esempi seguenti mostrano come aggiungere i pacchetti SDK più comuni per lavorare con DynamoDB.

  • npm install @aws-sdk/client-dynamodb

  • npm install @aws-sdk/lib-dynamodb

  • npm install @aws-sdk/util-dynamodb

L’installazione dei pacchetti aggiunge riferimenti alla sezione relativa alle dipendenze del file di progetto package.json. È possibile utilizzare la sintassi del ECMAScript modulo più recente. Per ulteriori dettagli su questi due approcci, consulta la sezione Considerazioni.

Accesso alla documentazione JavaScript

Inizia con JavaScript la documentazione con le seguenti risorse:

  • Accedi alla guida per gli sviluppatori per la JavaScript documentazione di base. Le istruzioni di installazione si trovano nella sezione Setting up.

  • Accedi alla documentazione di riferimento dell’API per esplorare tutte le classi e i metodi disponibili.

  • L'SDK for JavaScript supporta molti Servizi AWS altri sistemi oltre a DynamoDB. Utilizza la seguente procedura per individuare una copertura dell’API specifica per DynamoDB:

    1. Da Servizi, seleziona DynamoDB e librerie. Questo documenta il client di basso livello.

    2. Seleziona lib-dynamodb. Questo documenta il client di basso livello. I due client rappresentano due diversi livelli di astrazione che è possibile scegliere di utilizzare. Consulta la sezione seguente per ulteriori informazioni sui livelli di astrazione.

Livelli di astrazione

L'SDK per JavaScript V3 ha un client di basso livello (DynamoDBClient) e un client di alto livello (). DynamoDBDocumentClient

Client di basso livello (DynamoDBClient)

Il client di basso livello non fornisce astrazioni aggiuntive rispetto al protocollo wire sottostante. Dà il pieno controllo su tutti gli aspetti della comunicazione, ma poiché non ci sono astrazioni, è necessario occuparsi manualmente di aspetti come la definizione degli elementi utilizzando il formato JSON di DynamoDB.

Come illustrato nell’esempio seguente, con questo formato i tipi di dati devono essere indicati in modo esplicito. Una S indica un valore di stringa e una N indica un valore numerico. I numeri in rete vengono sempre inviati come stringhe contrassegnate come tipi di numeri per evitare perdite di precisione. Le chiamate API di basso livello hanno uno schema di denominazione come PutItemCommand e GetItemCommand.

L’esempio seguente utilizza un client di basso livello con Item definito utilizzando DynamoDB JSON:

const { DynamoDBClient, PutItemCommand } = require("@aws-sdk/client-dynamodb"); const client = new DynamoDBClient({}); async function addProduct() { const params = { TableName: "products", Item: { "id": { S: "Product01" }, "description": { S: "Hiking Boots" }, "category": { S: "footwear" }, "sku": { S: "hiking-sku-01" }, "size": { N: "9" } } }; try { const data = await client.send(new PutItemCommand(params)); console.log('result : ' + JSON.stringify(data)); } catch (error) { console.error("Error:", error); } } addProduct();

Client di alto livello (DynamoDBDocumentClient)

Il client documentale di alto livello DynamoDB offre funzionalità di praticità integrate, come l'eliminazione della necessità di organizzare manualmente i dati e la possibilità di letture e scritture dirette utilizzando oggetti standard. JavaScript La documentazione per lib-dynamodb illustra l’elenco dei vantaggi.

Per istanziare DynamoDBDocumentClient, costruisci un DynamoDBClient di basso livello e poi avvolgilo con un DynamoDBDocumentClient. La convenzione di denominazione delle funzioni differisce leggermente tra i due pacchetti. Ad esempio, il basso livello utilizza PutItemCommand, mentre l’alto livello utilizza PutCommand. I nomi distinti consentono a entrambi i set di funzioni di coesistere nello stesso contesto, permettendo di mescolarli entrambi nello stesso script.

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb"); const { DynamoDBDocumentClient, PutCommand } = require("@aws-sdk/lib-dynamodb"); const client = new DynamoDBClient({}); const docClient = DynamoDBDocumentClient.from(client); async function addProduct() { const params = { TableName: "products", Item: { id: "Product01", description: "Hiking Boots", category: "footwear", sku: "hiking-sku-01", size: 9, }, }; try { const data = await docClient.send(new PutCommand(params)); console.log('result : ' + JSON.stringify(data)); } catch (error) { console.error("Error:", error); } } addProduct();

Il modello di utilizzo è coerente quando si leggono elementi utilizzando operazioni API come GetItem, Query oScan.

Utilizzo della funzione di utilità marshall

È possibile utilizzare il client di basso livello ed eseguire manualmente le operazioni di marshall e unmarshall sui tipi di dati. Il pacchetto di utilità util-dynamodb ha una funzione di utilità marshall() che accetta JSON e produce DynamoDB JSON, oltre a una funzione unmarshall(), che fa l’opposto. L’esempio seguente utilizza il client di basso livello con il marshalling dei dati gestito dalla chiamata marshall().

const { DynamoDBClient, PutItemCommand } = require("@aws-sdk/client-dynamodb"); const { marshall } = require("@aws-sdk/util-dynamodb"); const client = new DynamoDBClient({}); async function addProduct() { const params = { TableName: "products", Item: marshall({ id: "Product01", description: "Hiking Boots", category: "footwear", sku: "hiking-sku-01", size: 9, }), }; try { const data = await client.send(new PutItemCommand(params)); } catch (error) { console.error("Error:", error); } } addProduct();

Lettura degli elementi

Per leggere un singolo elemento da DynamoDB si utilizza l’operazione API GetItem. Analogamente al comando PutItem, è possibile scegliere di utilizzare il client di basso livello o il client di documenti di alto livello. L’esempio seguente dimostra l’utilizzo del client di documenti di alto livello per recuperare un elemento.

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb"); const { DynamoDBDocumentClient, GetCommand } = require("@aws-sdk/lib-dynamodb"); const client = new DynamoDBClient({}); const docClient = DynamoDBDocumentClient.from(client); async function getProduct() { const params = { TableName: "products", Key: { id: "Product01", }, }; try { const data = await docClient.send(new GetCommand(params)); console.log('result : ' + JSON.stringify(data)); } catch (error) { console.error("Error:", error); } } getProduct();

Utilizza l’operazione API Query per leggere più elementi. È possibile utilizzare il client di basso livello o il client di documenti. L’esempio seguente utilizza il client di documenti di alto livello.

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb"); const { DynamoDBDocumentClient, QueryCommand, } = require("@aws-sdk/lib-dynamodb"); const client = new DynamoDBClient({}); const docClient = DynamoDBDocumentClient.from(client); async function productSearch() { const params = { TableName: "products", IndexName: "GSI1", KeyConditionExpression: "#category = :category and begins_with(#sku, :sku)", ExpressionAttributeNames: { "#category": "category", "#sku": "sku", }, ExpressionAttributeValues: { ":category": "footwear", ":sku": "hiking", }, }; try { const data = await docClient.send(new QueryCommand(params)); console.log('result : ' + JSON.stringify(data)); } catch (error) { console.error("Error:", error); } } productSearch();

Scritture condizionali

Le operazioni di scrittura di DynamoDB possono specificare un’espressione di condizione logica che deve restituire true affinché la scrittura possa procedere. Se la condizione non restituisce true, l’operazione di scrittura genera un’eccezione. L’espressione della condizione può verificare se l’elemento esiste già o se i suoi attributi soddisfano determinati vincoli.

ConditionExpression = "version = :ver AND size(VideoClip) < :maxsize"

Quando l’espressione condizionale non va a buon fine, è possibile utilizzare ReturnValuesOnConditionCheckFailure per richiedere che la risposta all’errore includa l’elemento che non soddisfa le condizioni per dedurre quale fosse il problema. Per ulteriori dettagli, consulta Handle conditional write errors in high concurrency scenarios with Amazon DynamoDB.

try { const response = await client.send(new PutCommand({ TableName: "YourTableName", Item: item, ConditionExpression: "attribute_not_exists(pk)", ReturnValuesOnConditionCheckFailure: "ALL_OLD" })); } catch (e) { if (e.name === 'ConditionalCheckFailedException') { console.log('Item already exists:', e.Item); } else { throw e; } }

Esempi di codice aggiuntivi che mostrano altri aspetti dell'utilizzo di JavsScript SDK V3 sono disponibili nella documentazione di SDK V3 e nel JavaScript repository. DynamoDB-SDK-Examples GitHub

Paginazione

Richieste di lettura come Scan o Query probabilmente restituiranno più elementi in un set di dati. Se si esegue un’operazione Scan o Query con un parametro Limit, una volta che il sistema avrà letto quel numero di elementi, verrà inviata una risposta parziale e sarà necessario eseguire un’impaginazione per recuperare elementi aggiuntivi.

Il sistema leggerà solo un massimo di 1 megabyte di dati per richiesta. Se si include un’espressione Filter, il sistema continuerà a leggere al massimo un megabyte di dati dal disco, ma restituirà gli elementi di quel megabyte che corrispondono al filtro. L’operazione di filtro potrebbe restituire 0 elementi per una pagina, ma richiedere comunque un’ulteriore impaginazione prima che la ricerca sia esaurita.

È necessario cercare LastEvaluatedKey nella risposta e utilizzarlo come parametro ExclusiveStartKey in una richiesta successiva per continuare il recupero dei dati. Questa operazione funge da segnalibro, come indicato nell’esempio seguente.

Nota

L’esempio restituisce un lastEvaluatedKey nullo come ExclusiveStartKey alla prima iterazione e questa operazione è consentita.

Esempio con LastEvaluatedKey:

const { DynamoDBClient, ScanCommand } = require("@aws-sdk/client-dynamodb"); const client = new DynamoDBClient({}); async function paginatedScan() { let lastEvaluatedKey; let pageCount = 0; do { const params = { TableName: "products", ExclusiveStartKey: lastEvaluatedKey, }; const response = await client.send(new ScanCommand(params)); pageCount++; console.log(`Page ${pageCount}, Items:`, response.Items); lastEvaluatedKey = response.LastEvaluatedKey; } while (lastEvaluatedKey); } paginatedScan().catch((err) => { console.error(err); });

Utilizzo del metodo di convenienza paginateScan

L’SDK fornisce metodi pratici denominati paginateScan e paginateQuery che funzionano automaticamente ed eseguono le richieste ripetute in background. Specifica il numero massimo di elementi da leggere per richiesta utilizzando il parametro standard Limit.

const { DynamoDBClient, paginateScan } = require("@aws-sdk/client-dynamodb"); const client = new DynamoDBClient({}); async function paginatedScanUsingPaginator() { const params = { TableName: "products", Limit: 100 }; const paginator = paginateScan({client}, params); let pageCount = 0; for await (const page of paginator) { pageCount++; console.log(`Page ${pageCount}, Items:`, page.Items); } } paginatedScanUsingPaginator().catch((err) => { console.error(err); });
Nota

L’esecuzione regolare di scansioni complete della tabella non è un modello di accesso consigliato, a meno che la tabella non sia piccola.

Specificare la configurazione

Per la configurazione di DynamoDBClient, è possibile specificare varie sostituzioni di configurazione passando un oggetto di configurazione al costruttore. Ad esempio, è possibile specificare la Regione a cui connettersi se non è già nota al contesto di chiamata o all’URL dell’endpoint da utilizzare. Ciò è utile se si desidera indirizzare un’istanza di DynamoDB locale per scopi di sviluppo.

const client = new DynamoDBClient({ region: "eu-west-1", endpoint: "http://localhost:8000", });

Configurazione per i timeout

DynamoDB utilizza HTTPS per la comunicazione client-server. È possibile controllare alcuni aspetti del livello HTTP fornendo un oggetto NodeHttpHandler. Ad esempio, è possibile regolare i valori di timeout chiave connectionTimeout e requestTimeout. connectionTimeout è la durata massima, in millisecondi, che il client aspetterà mentre tenta di stabilire una connessione prima di rinunciare.

requestTimeout definisce per quanto tempo il client aspetterà una risposta dopo l’invio di una richiesta, anch’esso in millisecondi. Le impostazioni predefinite per entrambi sono zero, il che significa che il timeout è disabilitato e non c’è limite al tempo di attesa del client se la risposta non arriva. È necessario impostare i timeout su un valore ragionevole in modo che, in caso di problemi di rete, la richiesta venga annullata e possa essere avviata una nuova richiesta. Esempio:

import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; import { NodeHttpHandler } from "@smithy/node-http-handler"; const requestHandler = new NodeHttpHandler({ connectionTimeout: 2000, requestTimeout: 2000, }); const client = new DynamoDBClient({ requestHandler });
Nota

L’esempio fornito utilizza l’importazione Smithy. Smithy è un linguaggio per la definizione di servizi ed è open source e gestito da. SDKs AWS

Oltre a configurare i valori di timeout, è possibile impostare il numero massimo di socket, il che consente un numero maggiore di connessioni simultanee per origine. La guida per gli sviluppatori include dettagli sulla configurazione del parametro maxSockets.

Configurazione per keep-alive

Quando si utilizza HTTPS, la prima richiesta richiede sempre una certa back-and-forth comunicazione per stabilire una connessione sicura. HTTP Keep-Alive consente alle richieste successive di riutilizzare la connessione già stabilita, rendendo le richieste più efficienti e riducendo la latenza. HTTP Keep-Alive è abilitato per impostazione predefinita con JavaScript V3.

Esiste un limite per la quantità di tempo in cui una connessione inattiva può essere mantenuta attiva. Prendi in considerazione l’invio di richieste periodiche, ad esempio ogni minuto, se hai una connessione inattiva ma desideri che la richiesta successiva utilizzi una connessione già stabilita.

Nota

Nella V2, meno recente, dell’SDK, keep-alive era disattivato per impostazione predefinita, ossia ogni connessione veniva chiusa immediatamente dopo l’uso. Se si utilizza V2, è possibile ignorare questa impostazione.

Configurazione per le ripetizioni di tentativi

Quando l’SDK riceve una risposta di errore e l’errore è ripristinabile in base a quanto stabilito dall’SDK, ad esempio un’eccezione di limitazione (della larghezza di banda della rete) o un’eccezione temporanea di servizio, ripeterà il tentativo. L’operazione avviene in modo invisibile al chiamante, sebbene sia possibile osservare un tempo maggiore per il completamento della richiesta.

L'SDK per JavaScript V3 effettuerà 3 richieste totali, per impostazione predefinita, prima di rinunciare e passare l'errore nel contesto di chiamata. È possibile modificare il numero e la frequenza di tali ripetizioni di tentativi.

Il costruttore DynamoDBClient accetta un’impostazione maxAttempts che limita il numero di tentativi da eseguire. L’esempio seguente aumenta il valore dal valore predefinito di 3 a un totale di 5. Se viene impostato su 0 o 1, significa l’assenza di intenzione di effettuare ripetizioni di tentativi automatiche e l’intenzione di gestire in autonomia eventuali errori ripristinabili all’interno del blocco catch.

const client = new DynamoDBClient({ maxAttempts: 5, });

È possibile anche controllare la tempistica delle ripetizioni di tentativi con una strategia relativa personalizzata. A tale scopo, importa il pacchetto di utilità util-retry e crea una funzione di backoff personalizzata che calcola il tempo di attesa tra le ripetizioni dei tentativi in base al numero di ripetizioni di tentativi corrente.

L’esempio seguente indica di effettuare un massimo di 5 tentativi con ritardi di 15, 30, 90 e 360 millisecondi se il primo tentativo fallisce. La funzione di backoff personalizzata, calculateRetryBackoff, calcola i ritardi accettando il numero di ripetizioni dei tentativi (inizia con 1 per il primo tentativo) e restituisce quanti millisecondi attendere per quella richiesta.

const { ConfiguredRetryStrategy } = require("@aws-sdk/util-retry"); const calculateRetryBackoff = (attempt) => { const backoffTimes = [15, 30, 90, 360]; return backoffTimes[attempt - 1] || 0; }; const client = new DynamoDBClient({ retryStrategy: new ConfiguredRetryStrategy( 5, // max attempts. calculateRetryBackoff // backoff function. ), });

Waiter

Il client DynamoDB include due utili funzioni waiter che possono essere utilizzate durante la creazione, la modifica o l’eliminazione di tabelle quando si desidera che il codice attenda di procedere fino al termine della modifica della tabella. Ad esempio, è possibile implementare una tabella, chiamare la funzione waitUntilTableExists e il codice si bloccherà finché la tabella non sarà resa ACTIVE. Il waiter interroga internamente il servizio DynamoDB con describe-table ogni 20 secondi.

import {waitUntilTableExists, waitUntilTableNotExists} from "@aws-sdk/client-dynamodb"; … <create table details> const results = await waitUntilTableExists({client: client, maxWaitTime: 180}, {TableName: "products"}); if (results.state == 'SUCCESS') { return results.reason.Table } console.error(`${results.state} ${results.reason}`);

La funzionalità waitUntilTableExists restituisce il controllo solo quando può eseguire un comando describe-table che mostra lo stato della tabella ACTIVE. In questo modo è possibile utilizzare waitUntilTableExists per attendere il completamento della creazione, nonché apportare modifiche come l’aggiunta di un GSI, che potrebbe richiedere del tempo prima che la tabella ritorni allo stato ACTIVE.

Gestione degli errori

Nei primi esempi precedenti sono stati individuati tutti gli errori in generale. Tuttavia, nelle applicazioni pratiche, è importante distinguere tra vari tipi di errore e implementare una gestione degli errori più precisa.

Le risposte di errore di DynamoDB contengono metadati, che comprendono il nome dell’errore. È possibile intercettare gli errori e confrontarli con i possibili nomi delle condizioni di errore per stabilire come procedere. Per gli errori lato server, è possibile sfruttare l’operatore instanceof con i tipi di errore esportati dal pacchetto @aws-sdk/client-dynamodb per dedicarsi in modo efficiente alla gestione degli errori.

È importante notare che questi errori si manifestano solo dopo aver esaurito tutte le ripetizioni di tentativi. Se dopo un errore viene effettuata una ripetizione di tentativo, successivamente seguita da una chiamata riuscita, dal punto di vista del codice non c’è alcun errore, ma solo una latenza leggermente maggiore. I nuovi tentativi verranno visualizzati nei CloudWatch grafici di Amazon come richieste non riuscite, ad esempio richieste di accelerazione o di errore. Se il client raggiunge il numero massimo di ripetizioni dei tentativi, rinuncerà e genererà un’eccezione. Con questa modalità il client comunica che non ripeterà i tentativi.

Di seguito è riportato uno snippet per intercettare l’errore e agire in base al tipo di errore restituito.

import { ResourceNotFoundException ProvisionedThroughputExceededException, DynamoDBServiceException, } from "@aws-sdk/client-dynamodb"; try { await client.send(someCommand); } catch (e) { if (e instanceof ResourceNotFoundException) { // Handle ResourceNotFoundException } else if (e instanceof ProvisionedThroughputExceededException) { // Handle ProvisionedThroughputExceededException } else if (e instanceof DynamoDBServiceException) { // Handle DynamoDBServiceException } else { // Other errors such as those from the SDK if (e.name === "TimeoutError") { // Handle SDK TimeoutError. } else { // Handle other errors. } } }

Consulta Gestione degli errori con DynamoDB per le stringhe di errore più comuni nella Guida per gli sviluppatori di DynamoDB. Gli errori esatti possibili con una particolare chiamata API sono disponibili nella documentazione relativa a quella chiamata API, come Query API docs.

I metadati degli errori includono proprietà aggiuntive, a seconda dell’errore. Per un TimeoutError, i metadati includono il numero di tentativi effettuati e il totalRetryDelay, come illustrato di seguito.

{ "name": "TimeoutError", "$metadata": { "attempts": 3, "totalRetryDelay": 199 } }

Se si gestisce in autonomia la propria policy sulla ripetizione dei tentativi, si consiglia di distinguere tra limitazioni (della larghezza di banda della rete) ed errori:

  • Una limitazione (della larghezza di banda della rete) (indicata da ProvisionedThroughputExceededException o ThrottlingException) indica un servizio funzionante che informa che è stata superata la capacità di lettura o scrittura su una tabella o partizione DynamoDB. Ogni millisecondo che passa viene resa disponibile altra capacità di lettura o scrittura, così che sia possibile ripetere i tentativi rapidamente, ad esempio ogni 50 ms, per tentare di accedere alla capacità appena rilasciata.

    Con le limitazioni (della larghezza di banda della rete) non è particolarmente necessario un backoff esponenziale, perché queste limitazioni sono leggere da restituire per DynamoDB e non comportano alcun costo per richiesta. Il backoff esponenziale assegna ritardi più lunghi ai thread client che hanno già atteso più a lungo, il che determina un aumento statistico di p50 e p99.

  • Un errore (indicato da InternalServerError o ServiceUnavailable, tra gli altri) indica un problema temporaneo con il servizio, probabilmente l’intera tabella o solo la partizione da cui si sta leggendo o scrivendo. In caso di errori, è possibile sospendere più a lungo prima della ripetizione dei tentativi, ad esempio 250 ms o 500 ms, e utilizzare il jitter per scaglionare le ripetizioni di tentativi.

Registrazione dei log

Attiva la registrazione di log per ottenere maggiori dettagli sulle attività dell’SDK. È possibile impostare un parametro DynamoDBClient come mostrato nell’esempio seguente. Nella console verranno visualizzate ulteriori informazioni dei log che includono metadati come il codice dello stato e la capacità utilizzata. Eseguendo il codice in locale tramite una finestra del terminale, i log saranno mostrati direttamente in questo ambiente. Se esegui il codice e hai configurato CloudWatch i log di Amazon, l'output della console verrà scritto lì. AWS Lambda

const client = new DynamoDBClient({ logger: console });

È anche possibile collegarsi alle attività interne dell’SDK ed eseguire registrazioni di log personalizzate quando si verificano determinati eventi. L’esempio seguente utilizza i dati del client middlewareStack per intercettare ogni richiesta inviata dall’SDK e per eseguirne la registrazione di log man mano che avviene.

const client = new DynamoDBClient({}); client.middlewareStack.add( (next) => async (args) => { console.log("Sending request from AWS SDK", { request: args.request }); return next(args); }, { step: "build", name: "log-ddb-calls", } );

MiddlewareStack fornisce un potente strumento per osservare e controllare il comportamento dell’SDK. Per ulteriori informazioni, consulta il blog Introducing Middleware Stack in Modular AWS SDK for JavaScript.

Considerazioni

Quando lo implementi AWS SDK for JavaScript nel tuo progetto, ecco alcuni altri fattori da considerare.

Sistemi di moduli

L'SDK supporta due sistemi di moduli, CommonJS ed ES ()ECMAScript. CommonJS utilizza la funzione require, mentre ES utilizza la parola chiave import.

  1. Common JSconst { DynamoDBClient, PutItemCommand } = require("@aws-sdk/client-dynamodb");

  2. ES (— ECMAScript import { DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb";

Il tipo di progetto determina il sistema di moduli da utilizzare ed è specificato nella sezione relativa al tipo del file package.json. L’impostazione predefinita è CommonJS. Utilizza "type": "module" per indicare un progetto ES. In caso di un progetto Node.JS esistente che utilizza il formato di pacchetto CommonJS, è comunque possibile aggiungere funzioni con la più moderna sintassi per l’importazione dell’SDK V3 denominando i file delle funzioni con l’estensione .mjs. Ciò consentirà al file di codice di essere trattato come ES (ECMAScript).

Operazioni asincrone

Molti esempi di codice utilizzano callback e promesse per gestire il risultato delle operazioni di DynamoDB. Con la modernità JavaScript questa complessità non è più necessaria e gli sviluppatori possono sfruttare la async/await sintassi più concisa e leggibile per le operazioni asincrone.

Runtime del browser web

Gli sviluppatori web e mobili che utilizzano React o React Native possono utilizzare l'SDK per i loro progetti. JavaScript Con la versione precedente dell'SDK, gli sviluppatori web avrebbero dovuto caricare l'SDK completo nel browser, facendo riferimento a un'immagine SDK ospitata su. https://sdk.amazonaws.com/js/

Con V3, è possibile raggruppare solo i moduli client V3 richiesti e tutte le JavaScript funzioni richieste in un unico JavaScript file utilizzando Webpack e aggiungerlo in un tag di script nelle pagine HTML, come spiegato nella sezione Guida introduttiva agli script <head> del browser della documentazione SDK.

Operazioni del piano dati DAX

Le operazioni del piano dati di Amazon DynamoDB Streams Accelerator (DAX) sono supportate dall'SDK per V3. JavaScript