

 La [Guía de referencia de la API de AWS SDK for JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) describe en detalle todas las operaciones de la API para la versión 3 (V3) de AWS SDK for JavaScript. 

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Consideraciones de Node.js
<a name="node-js-considerations"></a>

Aunque el código Node.js sí JavaScript lo es, su uso AWS SDK para JavaScript en Node.js puede diferir del uso del SDK en los scripts del navegador. Algunos métodos de API funcionan en Node.js pero no en scripts de navegador y viceversa. Y el uso correcto de algunos APIs de ellos depende de que esté familiarizado con los patrones de codificación habituales de Node.js, como la importación y el uso de otros módulos de Node.js, como el `File System (fs)` módulo.

**nota**  
AWS recomienda utilizar la versión Active LTS de Node.js para el desarrollo.

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

Node.js ofrece un conjunto de módulos integrados que puede utilizar sin necesidad de instalarlos. Para utilizar estos módulos, cree un objeto con el método `require` para especificar el nombre del módulo. Por ejemplo, para incluir el módulo HTTP integrado, utilice el código siguiente.

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

Invoque métodos del módulo como si fueran métodos de dicho objeto. Por ejemplo, a continuación le mostramos código que lee un archivo 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 obtener una lista completa de todos los módulos integrados que Node.js proporciona, consulte la [documentación de Node.js](https://nodejs.org/api/modules.html) sobre el sitio web de Node.js.

## Uso de paquetes de npm
<a name="node-npm-packages"></a>

Además de los módulos integrados, también puede incluir e incorporar código de terceros desde `npm`, el administrador de paquetes de Node.js. Se trata de un repositorio de paquetes Node.js de código abierto y una interfaz de línea de comandos para instalar dichos paquetes. Para obtener más información `npm` y una lista de los paquetes disponibles actualmente, consulte [ https://www.npmjs.com](https://www.npmjs.com). También puede obtener información sobre otros paquetes de Node.js que puede utilizar [aquí GitHub](https://github.com/sindresorhus/awesome-nodejs).

# Configuración de maxSockets en Node.js.
<a name="node-configuring-maxsockets"></a>

En Node.js, puede definir el número máximo de conexiones por origen. Si ` maxSockets` está establecido, el cliente HTTP de bajo nivel pone en cola las solicitudes y las asigna a conectores a medida que estos están disponibles.

Esto le permite configurar un límite máximo del número de solicitudes simultáneas a un determinado origen a la vez. Si disminuye este valor, podrá reducir el número de errores de tiempo de espera o de limitación controlada. Sin embargo, también puede aumentar el uso de la memoria, ya que las solicitudes se ponen en cola hasta que un conector esté disponible.

En el siguiente ejemplo, se muestra cómo se establece `maxSockets` para un cliente de 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
  });
});
```

El SDK JavaScript utiliza un `maxSockets` valor de 50 si no se proporciona un valor o un `Agent` objeto. Si se proporciona un objeto `Agent`, se utilizará su valor `maxSockets`. Para obtener más información sobre cómo configurar `maxSockets` en Node.js, consulte la [documentación de Node.js](https://nodejs.org/dist/latest/docs/api/http.html#http_agent_maxsockets).

A partir de la versión 3.521.0 del AWS SDK para JavaScript, puedes usar la siguiente sintaxis [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 },
  },
});
```

# Reutilización de conexiones con Keep-Alive en Node.js
<a name="node-reusing-connections"></a>

El HTTP/HTTPS agente Node.js predeterminado crea una nueva conexión TCP para cada nueva solicitud. Para evitar el coste de establecer una nueva conexión, AWS SDK para JavaScript reutiliza las conexiones TCP de *forma predeterminada*.

En el caso de las operaciones de corta duración, como las consultas de Amazon DynamoDB, la sobrecarga en latencia de la configuración de una conexión TCP puede ser mayor que la propia operación. Además, dado que el [cifrado en reposo de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html) está integrado, es posible que se [AWS KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)produzcan latencias en la base de datos al tener que restablecer AWS KMS nuevas entradas de caché para cada operación. 

Si no desea reutilizar las conexiones TCP, puede deshabilitar la reutilización activa de estas conexiones con `keepAlive` para cada cliente de servicio, como se muestra en el siguiente ejemplo para un cliente de 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 })
    })
});
```

Si `keepAlive` está habilitado, también puede establecer el retraso inicial de los paquetes TCP Keep-Alive con `keepAliveMsecs`, que de forma predeterminada es 1000 ms. Consulte la [documentación de Node.js](https://nodejs.org/api/http.html#new-agentoptions) para obtener más detalles.

# Configuración de proxies para Node.js
<a name="node-configuring-proxies"></a>

Si no puede conectarse directamente a Internet, el SDK JavaScript admite el uso de proxies HTTP o HTTPS a través de un agente HTTP de terceros.

Para encontrar un agente HTTP de terceros, busque “proxy HTTP” en [npm](https://www.npmjs.com/).

Para instalar un agente HTTP proxy de terceros, introduce lo siguiente en la línea de comandos, donde *PROXY* aparece el nombre del `npm` paquete. 

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

Para usar un proxy en su aplicación, utilice la propiedad `httpAgent` y ` httpsAgent`, como se muestra en el siguiente ejemplo para un cliente de 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` no es lo mismo que `httpsAgent`, y dado que la mayoría de las llamadas del cliente serán a `https`, ambas deberían estar configuradas.

# Registro de paquetes de certificados en Node.js
<a name="node-registering-certs"></a>

Los almacenes de confianza de Node.js incluyen los certificados necesarios para tener acceso a los servicios de AWS. En algunos casos, puede ser preferible incluir únicamente un conjunto específico de certificados.

En este ejemplo, se usa un certificado específico en el disco para crear un ` https.Agent` que rechace las conexiones a menos que se proporcione el certificado designado. A continuación, el cliente de DynamoDB utiliza el `https.Agent` que se acaba de crear.

```
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
  })
});
```