

 La [AWS SDK per JavaScript V3 API Reference Guide](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) descrive in dettaglio tutte le operazioni API per la AWS SDK per JavaScript versione 3 (V3). 

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à.

# Considerazioni su Node.js
<a name="node-js-considerations"></a>

Sebbene il codice Node.js lo sia JavaScript, l' AWS SDK per JavaScript utilizzo di Node.js può differire dall'utilizzo dell'SDK negli script del browser. Alcuni metodi API funzionano su Node.js ma non negli script di browser, e viceversa. E il corretto utilizzo di alcuni di APIs essi dipende dalla familiarità con i comuni schemi di codifica Node.js, come l'importazione e l'utilizzo di altri moduli Node.js come il modulo. `File System (fs)`

**Nota**  
AWS consiglia di utilizzare la versione Active LTS di Node.js per lo sviluppo.

## Utilizza i moduli Node.js integrati
<a name="node-common-modules"></a>

Node.js fornisce una raccolta di moduli integrati che è possibile utilizzare senza installazione. Per utilizzare questi moduli, è necessario creare un oggetto con il metodo `require` per specificare il nome del modulo. Ad esempio, per includere il modulo HTTP integrato, utilizza il seguente metodo.

```
import http from 'http';
```

Richiama i metodi del modulo come se fossero metodi di quell'oggetto. Ad esempio, qui c'è il codice per leggere un file HTML.

```
// include File System module
import fs from "fs"; 
// Invoke readFile method 
fs.readFile('index.html', function(err, data) {
  if (err) {
    throw err;
  } else {
    // Successful file read
  }
});
```

Per un elenco completo di tutti i moduli integrati forniti da Node.js, consultate la [documentazione di Node.js](https://nodejs.org/api/modules.html) sul sito Web Node.js.

## Usa i pacchetti npm
<a name="node-npm-packages"></a>

Oltre ai moduli integrati, puoi anche includere e incorporare codice di terze parti proveniente dal `npm` gestore di pacchetti Node.js. Si tratta di un repository di pacchetti Node.js open source e di un'interfaccia a riga di comando per installare i pacchetti. Per ulteriori informazioni `npm` e per un elenco dei pacchetti attualmente disponibili, vedere [ https://www.npmjs.com](https://www.npmjs.com). Puoi anche saperne di più sui pacchetti Node.js aggiuntivi che puoi usare [qui GitHub](https://github.com/sindresorhus/awesome-nodejs).

# Configurare MaxSockets in Node.js
<a name="node-configuring-maxsockets"></a>

Su Node.js, è possibile impostare il numero massimo di connessioni per origine. Se ` maxSockets` è impostato, il client HTTP di basso livello mette in coda le richieste e le assegna ai socket non appena diventano disponibili.

In questo modo, è possibile impostare un limite superiore per il numero di richieste simultanee per una determinata origine effettuate alla volta. Impostando un valore basso è possibile ridurre il numero di errori di timeout o throttling ricevuti. Tuttavia, potrebbe aumentare l'utilizzo della memoria, perché le richieste vengono accodate fino a quando un socket diventa disponibile.

L'esempio seguente mostra come impostare `maxSockets` un client DynamoDB.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import https from "https";    
let agent = new https.Agent({
  maxSockets: 25
});

let dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    requestTimeout: 3_000,
    httpsAgent: agent
  });
});
```

L'SDK for JavaScript utilizza `maxSockets` il valore 50 se non si fornisce un valore o un oggetto. `Agent` Se fornite un `Agent` oggetto, verrà utilizzato `maxSockets` il suo valore. Per ulteriori informazioni sull'impostazione `maxSockets` in Node.js, consultate la [documentazione di Node.js](https://nodejs.org/dist/latest/docs/api/http.html#http_agent_maxsockets).

A partire dalla versione 3.521.0 di AWS SDK per JavaScript, è possibile utilizzare la seguente sintassi [abbreviata](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#new-in-v35210) per la configurazione. `requestHandler`

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient({
  requestHandler: {
    requestTimeout: 3_000,
    httpsAgent: { maxSockets: 25 },
  },
});
```

# Riutilizza le connessioni con keep-alive in Node.js
<a name="node-reusing-connections"></a>

L' HTTP/HTTPS agente Node.js predefinito crea una nuova connessione TCP per ogni nuova richiesta. *Per evitare il costo di stabilire una nuova connessione, AWS SDK per JavaScript riutilizza le connessioni TCP per impostazione predefinita.*

Per operazioni di breve durata, come le query Amazon DynamoDB, il sovraccarico di latenza dovuto alla configurazione di una connessione TCP potrebbe essere maggiore dell'operazione stessa. Inoltre, poiché la [crittografia a riposo di DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html) è integrata [AWS KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)con, è possibile che si verifichino delle latenze dovute al database che devono ristabilire AWS KMS nuove voci della cache per ogni operazione. 

Se non si desidera riutilizzare le connessioni TCP, è possibile disattivare il riutilizzo di queste connessioni in tempo reale `keepAlive` su base client per servizio, come illustrato nell'esempio seguente per un client DynamoDB.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";

const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpsAgent: new Agent({ keepAlive: false })
    })
});
```

Se `keepAlive` è abilitato, è anche possibile impostare il ritardo iniziale per i pacchetti TCP Keep-Alive con, che per impostazione predefinita è 1000 ms. `keepAliveMsecs` Vedere la [documentazione di Node.js](https://nodejs.org/api/http.html#new-agentoptions) per i dettagli.

# Configura i proxy per Node.js
<a name="node-configuring-proxies"></a>

Se non riesci a connetterti direttamente a Internet, l'SDK JavaScript supporta l'uso di proxy HTTP o HTTPS tramite un agente HTTP di terze parti.

[Per trovare un agente HTTP di terze parti, cerca «proxy HTTP» su npm.](https://www.npmjs.com/)

Per installare un agente proxy HTTP di terze parti, inserisci quanto segue al prompt dei comandi, *PROXY* dov'è il nome del `npm` pacchetto. 

```
npm install PROXY --save
```

Per utilizzare un proxy nell'applicazione, utilizzate la ` httpsAgent` proprietà `httpAgent` and, come illustrato nell'esempio seguente per un client DynamoDB. 

```
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { HttpsProxyAgent } from "hpagent";
const agent = new HttpsProxyAgent({ proxy: "http://internal.proxy.com" });
const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpAgent: agent,
        httpsAgent: agent
    }),
});
```

**Nota**  
`httpAgent`non è uguale a`httpsAgent`, e poiché la maggior parte delle chiamate dal client sarà diretta a`https`, entrambe devono essere impostate.

# Registra i pacchetti di certificati in Node.js
<a name="node-registering-certs"></a>

Gli archivi di fiducia predefiniti per Node.js includono i certificati necessari per accedere ai AWS servizi. In alcuni casi, può essere preferibile includere solo uno specifico set di certificati.

In questo esempio, un determinato certificato su disco viene utilizzato per creare un ` https.Agent` che respinge le connessioni a meno che non venga fornito il certificato designato. Il nuovo file creato `https.Agent` viene quindi utilizzato dal client DynamoDB.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";
import { readFileSync } from "fs";
const certs = [readFileSync("/path/to/cert.pem")];
const agent = new Agent({
  rejectUnauthorized: true,
  ca: certs
});
const dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    httpAgent: agent,
    httpsAgent: agent
  })
});
```