

 O [Guia de referência da API do AWS SDK para JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) descreve em detalhes todas as operações da API para o AWS SDK para JavaScript versão 3 (V3). 

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Considerações sobre Node.js
<a name="node-js-considerations"></a>

Embora o código Node.js seja JavaScript, o uso do AWS SDK para JavaScript em Node.js pode ser diferente do uso do SDK em scripts de navegador. Alguns métodos de API funcionam em Node.js, mas não em scripts de navegador e vice-versa. E o uso bem-sucedido de alguns APIs depende de sua familiaridade com os padrões comuns de codificação do Node.js, como importar e usar outros módulos do Node.js, como o módulo. `File System (fs)`

**nota**  
AWS recomenda usar a versão Active LTS do Node.js para desenvolvimento.

## Usar módulos integrados do Node.js
<a name="node-common-modules"></a>

Node.js oferece um conjunto de módulos integrados que é possível usar sem instalá-los. Para usar esses módulos, crie um objeto com o método `require` para especificar o nome do módulo. Por exemplo, para incluir o módulo HTTP integrado, use o seguinte.

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

Invoque métodos do módulo como se eles fossem métodos desse objeto. Por exemplo, aqui está o código que lê um arquivo 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
  }
});
```

Para obter uma lista completa de todos os módulos integrados fornecidos por Node.js, consulte [Documentação do Node.js](https://nodejs.org/api/modules.html) no site do Node.js.

## Usar pacotes npm
<a name="node-npm-packages"></a>

Além dos módulos integrados, também é possível incluir e incorporar um código de terceiros de `npm`, o gerenciador de pacotes Node.js. Este é um repositório de pacotes de Node.js de código-aberto e uma interface de linha de comando para instalar esses pacotes. Para obter mais informações `npm` e uma lista dos pacotes atualmente disponíveis, consulte [ https://www.npmjs.com](https://www.npmjs.com). Você também pode aprender sobre pacotes adicionais do Node.js que você pode usar [aqui GitHub](https://github.com/sindresorhus/awesome-nodejs).

# Configurar maxSockets no Node.js
<a name="node-configuring-maxsockets"></a>

Em Node.js, defina o número máximo de conexões por origem. Se ` maxSockets` estiver definido, o cliente HTTP de baixo nível adicionará solicitações HTTP à fila e as atribuirá a soquetes à medida que forem disponibilizados.

Isso permite definir um limite máximo para o número de solicitações simultâneas para uma determinada origem por vez. Reduzir esse valor pode reduzir o número de erros de tempo limite ou de limitação recebidos. No entanto, isso também pode aumentar o uso da memória porque as solicitações serão enfileiradas até um soquete ser disponibilizado.

O exemplo a seguir mostra como definir `maxSockets` para um cliente do 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
  });
});
```

O SDK para JavaScript usa um `maxSockets` valor de 50 se você não fornecer um valor ou um `Agent` objeto. Se você fornecer um objeto de `Agent`, seu valor de `maxSockets` será usado. Para obter mais informações sobre como definir `maxSockets` no Node.js, consulte a [documentação do Node.js](https://nodejs.org/dist/latest/docs/api/http.html#http_agent_maxsockets).

A partir da v3.521.0 do AWS SDK para JavaScript, você pode usar a seguinte sintaxe [abreviada](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#new-in-v35210) para configurar. `requestHandler`

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

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

# Reutilizar conexões com keep-alive no Node.js
<a name="node-reusing-connections"></a>

O HTTP/HTTPS agente Node.js padrão cria uma nova conexão TCP para cada nova solicitação. Para evitar o custo de estabelecer uma nova conexão, o AWS SDK para JavaScript reutiliza conexões TCP *por* padrão.

Para operações de curta duração, como consultas do Amazon DynamoDB, a sobrecarga de latência da configuração de uma conexão TCP pode ser maior do que a própria operação. Além disso, como a [criptografia do DynamoDB em repouso](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html) está integrada [AWS KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html), você pode experimentar latências do banco de dados tendo que restabelecer AWS KMS novas entradas de cache para cada operação. 

Se não quiser reutilizar conexões TCP, você pode desabilitar com um `keepAlive` por cliente de serviço, conforme mostrado no exemplo a seguir para um cliente do 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` estiver habilitado, você também poderá definir o atraso inicial para pacotes TCP keep-alive com `keepAliveMsecs` que, por padrão, é 1000 ms. Consulte a [documentação do Node.js](https://nodejs.org/api/http.html#new-agentoptions) para obter detalhes.

# Configurar proxies para o Node.js
<a name="node-configuring-proxies"></a>

Se você não conseguir se conectar diretamente à Internet, o SDK para JavaScript suporta o uso de proxies HTTP ou HTTPS por meio de um agente HTTP terceirizado.

Para encontrar um agente HTTP de terceiros, pesquise por “proxy HTTP” em [npm](https://www.npmjs.com/).

Para instalar um proxy de agente HTTP de terceiros, digite o seguinte no prompt de comando, onde *PROXY* está o nome do `npm` pacote. 

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

Para usar um proxy em seu aplicativo, use as propriedades `httpAgent` e ` httpsAgent`, conforme mostrado no exemplo a seguir para um cliente do 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` não é o mesmo que`httpsAgent`, e como a maioria das chamadas do cliente será para `https`, ambas devem ser definidas.

# Registrar pacotes de certificados no Node.js
<a name="node-registering-certs"></a>

Os armazenamentos de confiança padrão de Node.js incluem os certificados necessários para acessar os serviços da AWS . Em alguns casos, pode ser preferível incluir apenas um conjunto específico de certificados.

Neste exemplo, um certificado específico em disco é usado para criar um ` https.Agent` que rejeita conexões, a menos que o certificado designado seja fornecido. O recém-criado `https.Agent` é então usado pelo cliente do 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
  })
});
```