

 [适用于 JavaScript 的 AWS SDK V3 API 参考指南](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)详细描述了 适用于 JavaScript 的 AWS SDK 版本 3 (V3) 的所有 API 操作。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Node.js 注意事项
<a name="node-js-considerations"></a>

尽管 Node.js 代码是 JavaScript，但 适用于 JavaScript 的 AWS SDK 在 Node.js 中使用可能与在浏览器脚本中使用 SDK 有所不同。一些 API 方法在 Node.js 中有效，但在浏览器脚本以及其他方法中不起作用。成功使用某些模块 APIs 取决于你对常见 Node.js 编码模式的熟悉程度，例如导入和使用其他 Node.js 模块，例如该模`File System (fs)`块。

**注意**  
AWS 建议使用 Active LTS 版本的 Node.js 进行开发。

## 使用内置 Node.js 模块
<a name="node-common-modules"></a>

Node.js 提供了一组内置模块，无需安装即可使用它们。要使用这些模块，请使用 `require` 方法创建一个对象以指定模块名称。例如，要包含内置的 HTTP 模块，请使用以下方法。

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

调用模块的方法，就好像它们是该对象的方法一样。例如，下面的代码读取您的 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
  }
});
```

有关 Node.js 提供的所有内置模块的完整列表，请参阅 Node.js 网站上的 [Node.js 文档](https://nodejs.org/api/modules.html)。

## 使用 npm 程序包
<a name="node-npm-packages"></a>

除了内置模块，您还可以包含并合并来自 `npm`（即 Node.js 程序包管理器）的第三方代码。这是一个开源 Node.js 程序包的存储库和一个用于安装这些程序包的命令行界面。有关软件包的更多信息`npm`以及当前可用软件包的列表，请参阅[ https://www.npmjs.com](https://www.npmjs.com)。您还可以在[此处](https://github.com/sindresorhus/awesome-nodejs)了解可以使用的其他 Node.js 软件包 GitHub。

# 在 Node.js 中配置 maxSockets
<a name="node-configuring-maxsockets"></a>

在 Node.js 中，您可以设置每个源的最大连接数。如果设置了 ` maxSockets`，则低级 HTTP 客户端会将请求排队，并在它们可用时将它们分配给套接字。

这使您可以设置在某个时间对给定源的并发请求数的上限。降低此值可以减少收到的限制或超时错误的数量。但是，它还会增加内存使用量，因为请求进行排队，直到套接字变为可用状态。

以下示例演示了如何为 DynamoDB 客户端设置 `maxSockets`：

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

如果您不提供`maxSockets`值或`Agent`对象，则适用的 SDK 将 JavaScript 使用值 50。如果您提供了 `Agent` 对象，则系统将使用其 `maxSockets` 值。有关在 Node.js 中设置 `maxSockets` 的更多信息，请参阅 [Node.js 文档](https://nodejs.org/dist/latest/docs/api/http.html#http_agent_maxsockets)。

从 v3.521.0 起 适用于 JavaScript 的 AWS SDK，您可以使用以下[速记语法进行配置](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#new-in-v35210)。`requestHandler`

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

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

# 在 Node.js 中重复使用具有保持连接功能的连接
<a name="node-reusing-connections"></a>

默认的 Node.js HTTP/HTTPS 代理会为每个新请求创建一个新的 TCP 连接。为了避免建立新连接的成本，*默认情况下*会 适用于 JavaScript 的 AWS SDK 重复使用 TCP 连接。

对于短期操作（如 Amazon DynamoDB 查询），设置 TCP 连接的延迟开销可能大于操作本身。此外，由于 Dy [namoDB 静态加密[AWS KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)与集成，因此您可能会遇到数据库延迟，必须为每个操作重新建立 AWS KMS 新的缓存条目。

如果您不想重复使用 TCP 连接，可以通过 `keepAlive` 在每个服务客户端级别，禁用重复使用这些活跃连接，如以下 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 })
    })
});
```

如果已启用 `keepAlive`，您还可以使用 `keepAliveMsecs` 设置 TCP Keep-Alive 数据包的初始延迟，默认值为 1000ms。有关详细信息，请参阅 [Node.js 文档](https://nodejs.org/api/http.html#new-agentoptions)。

# 配置 Node.js 的代理
<a name="node-configuring-proxies"></a>

如果您无法直接连接到互联网，则适用的 SDK JavaScript 支持通过第三方 HTTP 代理使用 HTTP 或 HTTPS 代理。

要查找第三方 HTTP 代理，请在 [npm](https://www.npmjs.com/) 上搜索“HTTP 代理”。

要安装第三方 HTTP 代理代理，请在命令提示符下输入以下内容，其中*PROXY*是`npm`软件包的名称。

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

要在应用程序中使用代理，请使用 `httpAgent` 和 ` httpsAgent` 属性，如以下 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
    }),
});
```

**注意**  
`httpAgent` 与 `httpsAgent`，而且由于来自客户端的大多数调用都是指向 `https`，因此两者都应设置。

# 在 Node.js 中注册证书包
<a name="node-registering-certs"></a>

Node.js 的默认信任存储包含访问 AWS 服务所需的证书。在某些情况下，最好只包括一组特定的证书。

在本示例中，使用磁盘上的特定证书创建 ` https.Agent`，除非提供指定的证书，否则它会拒绝连接。然后，DynamoDB 客户端将使用新创建的 `https.Agent`。

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