

 [適用於 JavaScript 的 AWS SDK V3 API 參考指南](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)詳細說明 第 3 版 適用於 JavaScript 的 AWS SDK (V3) 的所有 API 操作。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Node.js 考量事項
<a name="node-js-considerations"></a>

雖然 Node.js 程式碼是 JavaScript，但在 Node.js 適用於 JavaScript 的 AWS SDK 中使用 可能會與在瀏覽器指令碼中使用 SDK 不同。有些在 Node.js 中可運作的 API 方法無法在瀏覽器指令碼中運作，反之亦然。是否能成功使用某些 API，取決於您對常見 Node.js 程式碼編寫方式的熟悉程度，例如匯入及使用 `File System (fs)` 模組之類的其他 Node.js 模組。

**注意**  
AWS 建議使用 Node.js 的 Active LTS 版本進行開發。

## 使用內建 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>

除了內建模組之外，您還可以包含和整合來自 Node`npm`.js 套件管理員 的第三方程式碼。這是開放原始碼 Node.js 套件的儲存庫以及用來安裝那些套件的命令列界面。如需 `npm`和目前可用套件清單的詳細資訊，請參閱 [ https：//https://www.npmjs.com](https://www.npmjs.com)。您也可以了解您可以在 [ GitHub 上在此處](https://github.com/sindresorhus/awesome-nodejs)使用的其他 Node.js 套件。

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

您可以在 Node.js 中，依來源設定連線數量上限。如果已設定 ` maxSockets`，低階 HTTP 用戶端會在請求可供使用時將它們排入佇列並指派至通訊端。

這可讓您隨時為指定來源的並行請求數設定上限。降低此值可能會減少調節量或接收的逾時錯誤數。然而，這也可能增加記憶體使用量，因為請求在通訊端可用前都會排在佇列中。

下列範例示範如何`maxSockets`設定 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
  });
});
```

如果您未提供`maxSockets`值或`Agent`物件，適用於 JavaScript 的 SDK 會使用 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 連線的延遲額外負荷可能大於操作本身。此外，由於 DynamoDB [靜態加密](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)已與 整合[AWS KMS](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`已啟用 ，您也可以使用 設定 TCP Keep-Alive 封包的初始延遲`keepAliveMsecs`，預設為 1000 毫秒。請參閱 [Node.js 文件](https://nodejs.org/api/http.html#new-agentoptions)了解詳細資訊。

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

如果您無法直接連線至網際網路，適用於 JavaScript 的 SDK 支援透過第三方 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` (除非提供指定的憑證)。`https.Agent` 然後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
  })
});
```