すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud SDK:Alibaba Cloud SDK V2.0 for Node.js を統合する

最終更新日:Jul 08, 2025

API 呼び出しを容易にするために、プロジェクトに Alibaba Cloud SDK を統合することをお勧めします。 SDK は開発プロセスを簡素化し、機能を迅速に統合し、O&M コストを大幅に削減します。 Alibaba Cloud SDK と統合するには、次の手順を実行します。Alibaba Cloud SDK のインストール、アクセス認証情報の構成、および SDK の使用。このトピックでは、Alibaba Cloud SDK と統合する方法について説明します。

前提条件

Node.js のバージョンは 8.x 以降です。

SDK をインポートする

  1. SDK Center にログインし、SDK を使用したいサービスを選択します。この例では、Short Message Service (SMS) を選択します。

  2. [Short Message Service] ページ、[TypeScript][すべての言語] セクションで選択します。 [クイックスタート] タブで、Short Message Service (SMS) SDK のインストール方法を取得します。image

アクセス認証情報を構成する

Alibaba Cloud サービスの API オペレーションを呼び出すには、AccessKey ペアSecurity Token Service (STS) トークン などのアクセス認証情報を構成する必要があります。 AccessKey ペアの漏洩を防ぐために、環境変数に AccessKey ペアを記録できます。その他のセキュリティソリューションの詳細については、「認証情報のセキュリティソリューション」をご参照ください。この例では、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を使用して、AccessKey ペアを記録します。

Linux および macOS で環境変数を構成する

export コマンドを使用して環境変数を構成する

重要

export コマンドを使用して構成された一時環境変数は、現在のセッションでのみ有効です。セッションを終了すると、構成された環境変数は無効になります。永続的な環境変数を構成するには、対応するオペレーティングシステムの起動構成ファイルに export コマンドを追加します。

  • AccessKey ID を構成し、Enter キーを押します。

    # <ACCESS_KEY_ID> を AccessKey ID に置き換えます。
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • AccessKey シークレットを構成し、Enter キーを押します。

    # <ACCESS_KEY_SECRET> を AccessKey シークレットに置き換えます。
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • 構成が成功したかどうかを確認します。

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID コマンドを実行します。有効な AccessKey ID が返された場合、環境変数は構成されています。

Windows で環境変数を構成する

GUI を使用する

  • 手順

    Windows 10 で GUI を使用して環境変数を構成する場合、次の手順を実行します。

    Windows デスクトップで、[この PC] を右クリックし、[プロパティ] を選択します。表示されるページで、[システムの詳細設定] をクリックします。 [システムのプロパティ] ダイアログボックスの [詳細設定] タブで、[環境変数] をクリックします。 [環境変数] ダイアログボックスで、[ユーザー環境変数] または [システム環境変数] セクションの [新規] をクリックします。次に、次の表に示す変数を構成します。

    変数

    AccessKey ID

    • 変数名: ALIBABA_CLOUD_ACCESS_KEY_ID

    • 変数値: LTAI****************

    AccessKey シークレット

    • 変数名: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • 変数値: yourAccessKeySecret

  • 構成が成功したかどうかを確認します。

    Windows デスクトップで、[スタート] をクリックするか、[Win + R] を押します。 [ファイル名を指定して実行] ダイアログボックスに「cmd」と入力します。次に、[OK] をクリックするか、Enter キーを押します。表示されるページで、echo %ALIBABA_CLOUD_ACCESS_KEY_ID% および echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET% コマンドを実行します。有効な AccessKey ペアが返された場合、構成は成功です。

CMD を使用する

  • 手順

    管理者としてコマンドプロンプトウィンドウを開き、次のコマンドを実行して、オペレーティングシステムに環境変数を追加します。

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    /M は、環境変数がシステムレベルであることを示します。ユーザーレベルの環境変数を構成する場合は、このパラメータを使用しないことを選択できます。

  • 構成が成功したかどうかを確認します。

    Windows デスクトップで、[スタート] をクリックするか、[Win + R] を押します。 [ファイル名を指定して実行] ダイアログボックスに「cmd」と入力します。次に、[OK] をクリックするか、Enter キーを押します。表示されるページで、echo %ALIBABA_CLOUD_ACCESS_KEY_ID% および echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET% コマンドを実行します。有効な AccessKey ペアが返された場合、構成は成功です。

Windows PowerShell を使用する

PowerShell で、新しい環境変数を構成します。環境変数は、すべての新しいセッションに適用されます。

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)

すべてのユーザーの環境変数を構成します。次のコマンドを管理者として実行する必要があります。

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)

一時環境変数を構成します。環境変数は、現在のセッションにのみ適用されます。

$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"

PowerShell で、Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID および Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET コマンドを実行します。有効な AccessKey ペアが返された場合、構成は成功です。

SDK を使用する

この例では、Short Message Service (SMS)SendMessageToGlobe API オペレーションが呼び出されます。 SendMessageToGlobe の詳細については、「SendMessageToGlobe」をご参照ください。

1. リクエストクライアントを初期化する

SDK では、API オペレーションへのすべてのリクエストはクライアントから送信されます。 API オペレーションを実行する前に、リクエストクライアントを初期化する必要があります。複数のメソッドを使用して、リクエストクライアントを初期化できます。この例では、AccessKey ペアを使用してリクエストクライアントを初期化します。詳細については、「アクセス認証情報を管理する」をご参照ください。

重要
  • Dysmsapi20180501 インスタンスなどのクライアントオブジェクトはスレッドセーフであり、セキュリティリスクなしでマルチスレッド環境で使用できます。スレッドごとにインスタンスを作成する必要はありません。

  • 開発プロジェクトでは、new キーワードを使用してクライアントオブジェクトを頻繁に作成しないことをお勧めします。そうしないと、リソースの浪費が増加し、サービスのパフォーマンスが低下する可能性があります。クライアントをシングルトンモードでカプセル化することをお勧めします。これにより、アプリケーションのライフサイクル全体で、同じアクセス認証情報とエンドポイントに対して 1 つの Client インスタンスのみが初期化されます。

TypeScript

import Dysmsapi20180501, * as $Dysmsapi20180501 from '@alicloud/dysmsapi20180501';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';

export default class Client {

  static createClient(): Dysmsapi20180501 {
    let config = new $OpenApi.Config({
      // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
      // 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_ID。
      accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
      // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
      // 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_SECRET。
      accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    // See https://api.alibabacloud.com/product/Dysmsapi.
    // SMS のエンドポイント。詳細については、https://api.alibabacloud.com/product/Dysmsapi をご覧ください。
    config.endpoint = `dysmsapi.aliyuncs.com`;
    return new Dysmsapi20180501(config);
  }
}

Node.js

const Dysmsapi20180501 = require('@alicloud/dysmsapi20180501');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');

class Client {

  static createClient() {
    let config = new OpenApi.Config({
      // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
      // 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_ID。
      accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
      // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
      // 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_SECRET。
      accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    // See https://api.alibabacloud.com/product/Dysmsapi.
    // SMS のエンドポイント。詳細については、https://api.alibabacloud.com/product/Dysmsapi をご覧ください。
    config.endpoint = `dysmsapi.aliyuncs.com`;
    return new Dysmsapi20180501.default(config);
  }
}

2. リクエストオブジェクトを作成する

API オペレーションを呼び出してパラメータを渡すときは、SDK によって提供されるリクエストオブジェクトを使用する必要があります。リクエストオブジェクトの名前は、<API オペレーション名>Request の形式で指定します。たとえば、SendSms API オペレーションのリクエストオブジェクトは SendSmsRequest です。パラメータの詳細については、API リファレンスを参照してください。 SendMessageToGlobe オペレーションのパラメータの詳細については、「SendMessageToGlobe」をご参照ください。

説明

API オペレーションがリクエストパラメータをサポートしていない場合は、リクエストオブジェクトを作成する必要はありません。たとえば、DescribeCdnSubList オペレーションはリクエストパラメータをサポートしていません。

TypeScript

 // Create request object and set required input parameters
 // リクエストオブジェクトを作成し、必要な入力パラメータを設定します
 let sendMessageToGlobeRequest = new $Dysmsapi20180501.SendMessageToGlobeRequest({
      // Please replace with the actual recipient number.
      // 実際の受信者番号に置き換えてください。
      to: "<YOUR_VALUE>",
      // Please replace with the actual SMS content.
      // 実際の SMS コンテンツに置き換えてください。
      message: "<YOUR_VALUE>",
    });

Node.js

// Create request object and set required input parameters
// リクエストオブジェクトを作成し、必要な入力パラメータを設定します
let sendMessageToGlobeRequest = new Dysmsapi20180501.SendMessageToGlobeRequest({
    // Please replace with the actual recipient number.
    // 実際の受信者番号に置き換えてください。
    to: '<YOUR_VALUE>',
    // Please replace with the actual SMS content.
    // 実際の SMS コンテンツに置き換えてください。
    message: '<YOUR_VALUE>',
});

3. API リクエストを開始する

リクエストクライアントを使用して API オペレーションを呼び出すときは、関数の名前を <API オペレーション名>WithOptions の形式で指定することをお勧めします。 <API オペレーション名> はキャメルケースで指定します。この関数には、リクエストオブジェクトとランタイムパラメータの 2 つのパラメータが含まれています。リクエストオブジェクトは前の手順で作成されます。ランタイムパラメータは、タイムアウトやプロキシ構成などのリクエストアクションを指定するために使用されます。詳細については、「詳細構成」をご参照ください。

説明

API オペレーションがリクエストパラメータをサポートしていない場合は、リクエストにリクエストオブジェクトを指定する必要はありません。たとえば、DescribeCdnSubList オペレーションを呼び出すときは、ランタイムパラメータのみを指定する必要があります。

TypeScript

// Create runtime parameters.
// ランタイムパラメータを作成します。
let runtime = new $Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
// リクエストを送信します。
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);

Node.js

// Create runtime parameters.
// ランタイムパラメータを作成します。
let runtime = new Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
// リクエストを送信します。
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);

4. エラーを処理する

Node.js 用 Alibaba Cloud SDK V2.0 は、例外を次のタイプに分類します。

  • UnretryableError: ほとんどの場合、このタイプの例外はネットワークの問題が原因です。再試行回数が上限に達すると、UnretryableError がスローされます。 err.data.lastRequest を使用して、例外が発生したときのリクエスト情報を取得できます。

  • ResponseError: ほとんどの場合、このタイプの例外はビジネスエラーが原因です。

SDK 例外を処理する方法の詳細については、「例外処理」をご参照ください。

重要

適切な例外処理対策(例外の報告、例外のログ記録、再試行の実行など)を講じて、システムの堅牢性と安定性を確保することをお勧めします。

クリックして完全なサンプルコードを表示する

SendSmsSendMessageToGlobe の例: SendMessageToGlobe オペレーションを呼び出す

TypeScript

import Dysmsapi20180501, * as $Dysmsapi20180501 from '@alicloud/dysmsapi20180501';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';

export default class Client {

  static createClient(): Dysmsapi20180501 {
    let config = new $OpenApi.Config({
      // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
      accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
      // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
      accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    // The endpoint of SMS. For more information, visit https://api.alibabacloud.com/product/Dysmsapi.
    config.endpoint = `dysmsapi.aliyuncs.com`;
    return new Dysmsapi20180501(config);
  }

  static async main(): Promise<void> {
    let client = Client.createClient();
    // Create a request object and specify parameters.
    let sendMessageToGlobeRequest = new $Dysmsapi20180501.SendMessageToGlobeRequest({
      to: "<YOUR_VALUE>",
      from: "<YOUR_VALUE>",
      message: "<YOUR_VALUE>",
    });
    let runtime = new $Util.RuntimeOptions({ });
    try {
      // Initiate the request.  
      await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
    } catch (error) {
      // Handle exceptions with caution in actual business scenarios and never ignore exceptions in your project. In this example, error messages are displayed in the console. 
      // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージがコンソールに表示されます。
      // Return error messages.
      console.log(error.message);
      // The URL of the corresponding error diagnostics page.
      console.log(error.data["Recommend"]);
    }    
  }
}

Client.main();

Node.js

const Dysmsapi20180501 = require('@alicloud/dysmsapi20180501');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');

class Client {

  static createClient() {
    let config = new OpenApi.Config({
      // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
      accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
      // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
      accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    // The endpoint of SMS. For more information, visit https://api.alibabacloud.com/product/Dysmsapi.
    config.endpoint = `dysmsapi.aliyuncs.com`;
    return new Dysmsapi20180501.default(config);
  }

  static async main() {
    // Create a request object and specify parameters.
    let client = Client.createClient();
    let sendMessageToGlobeRequest = new Dysmsapi20180501.SendMessageToGlobeRequest({
      to: '<YOUR_VALUE>',
      from: '<YOUR_VALUE>',
      message: '<YOUR_VALUE>',
    });
    let runtime = new Util.RuntimeOptions({ });
    try {
      // Initiate the request.
      await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
    } catch (error) {
      // Handle exceptions with caution in actual business scenarios and never ignore exceptions in your project. In this example, error messages are displayed in the console. 
      // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージがコンソールに表示されます。
      // Return error messages.
      console.log(error.message);
      // The URL of the corresponding error diagnostics page.
      console.log(error.data["Recommend"]);
      Util.default.assertAsString(error.message);
    }    
  }
}

exports.Client = Client;
Client.main();

特別なシナリオ: Advance オペレーションによるファイルアップロード

オンプレミス機器の画像を処理したり、画像をアップロードしたりするために Image Search または Visual Intelligence API (VIAPI) を使用する場合、ドキュメントに記載されている Image Search または VIAPI の API は直接アップロードをサポートしていません。画像をアップロードするには、ファイルストリームの送信をサポートする Advance オペレーションを使用する必要があります。クラウドサービスは、アップロードされたファイルを一時的に Object Storage Service (OSS) に保存し、必要に応じて OSS から一時ファイルを読み取ります。 OSS のデフォルトリージョンは cn-shanghai です。次の例は、VIAPI の DetectBodyCount オペレーションを呼び出す方法を示しています。

重要

OSS の一時ファイルは定期的にクリアされます。

  1. リクエストクライアントを初期化する

    regionId パラメータとクラウドサービスの endpoint の両方が指定されていることを確認します。 regionId は、一時ファイルが保存される OSS リージョンを示します。 regionId パラメータを構成しない場合、クラウドサービスは OSS とは異なるリージョンを使用する可能性があり、API タイムアウトが発生する可能性があります。

    TypeScript

    function createClient(): facebody20191230 {
        let config = new $OpenApi.Config({
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
            accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
            accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
        });
        // Specify the same region for the endpoint and regionId parameters.
        // エンドポイントと regionId パラメータに同じリージョンを指定します。
        config.regionId = 'cn-shanghai';
        config.endpoint = 'facebody.cn-shanghai.aliyuncs.com';
        return new facebody20191230(config);
    }

    Node.js

    function createClient() {
      let config = new OpenApi.Config({
        // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
        accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
        accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
      });
      // Specify the same region for the endpoint and regionId parameters.
      // エンドポイントと regionId パラメータに同じリージョンを指定します。
      config.regionId = 'cn-shanghai';
      config.endpoint = 'facebody.cn-shanghai.aliyuncs.com';
      return new facebody20191230.default(config);
    }
  2. リクエストオブジェクトを作成する

    <API オペレーション>AdvanceRequest リクエストオブジェクトを作成して、ファイルストリームを渡します。リクエストオブジェクトで、パラメータ名を ImageURLObject に設定します。

    TypeScript

        // Read the file as a fileStream stream.
        // ファイルを fileStream ストリームとして読み取ります。
        const filePath = '<FILE_PATH>';  // Replace the value with the actual file path.
        // 実際のファイルパスで値を置き換えます。
        // Check the file.
        // ファイルを確認します。
        if (!fs.existsSync(filePath)) {
            console.error('The file does not exist:', filePath);
            return;
        }
        // Create a stream and listen for stream errors.
        // ストリームを作成し、ストリームエラーをリッスンします。
        const fileStream = fs.createReadStream(filePath).on('error', (err) => {
            console.error('File stream errors:', err);
            process.exit(1);
        });
    
        let detectBodyCountAdvanceRequest = new $facebody20191230.DetectBodyCountAdvanceRequest({
          imageURLObject: fileStream,
        });

    Node.js

        // Read the file as a fileStream stream.
        // ファイルを fileStream ストリームとして読み取ります。
        const filePath = '<FILE_PATH>';  // Replace the value with the actual file path.
        // 実際のファイルパスで値を置き換えます。
        // Check the file.
        // ファイルを確認します。
        if (!fs.existsSync(filePath)) {
            console.error('The file does not exist:', filePath);
            return;
        }
        // Create a stream and listen for stream errors.
        // ストリームを作成し、ストリームエラーをリッスンします。
        const fileStream = fs.createReadStream(filePath).on('error', (err) => {
            console.error('File stream errors:', err);
            process.exit(1);
        });
    
        let detectBodyCountAdvanceRequest = new facebody20191230.DetectBodyCountAdvanceRequest({
            imageURLObject: fileStream,
        });
  3. リクエストを開始する

    <API オペレーション>AdvanceRequest オペレーションを呼び出します。

    TypeScript

    // Configure the runtime parameters.
    // ランタイムパラメータを構成します。
    let runtime = new $Util.RuntimeOptions({ });
    let client = Client.createClient();
    // Send the request.   
    // リクエストを送信します。
    await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);

    Node.js

     // Configure the runtime parameters.
     // ランタイムパラメータを構成します。
     let runtime = new Util.RuntimeOptions({ });
     let client = Client.createClient();
     // Send the request.   
     // リクエストを送信します。
     await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);  

クリックして完全なサンプルコードを表示する

TypeScript

import { default as facebody20191230 } from '@alicloud/facebody20191230';
import * as $facebody20191230 from '@alicloud/facebody20191230';
import * as $OpenApi from '@alicloud/openapi-client';
import * as $Util from '@alicloud/tea-util';
import * as fs from "fs";

export default class Client {
    static createClient(): facebody20191230 {
        let config = new $OpenApi.Config({
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
            accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
            accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
        });
        config.regionId = 'cn-shanghai';
        config.endpoint = 'facebody.cn-shanghai.aliyuncs.com';
        return new facebody20191230(config);
    }

    static async main(): Promise<void> {
        let client = Client.createClient();

        // Read the file as a fileStream stream.
        // ファイルを fileStream ストリームとして読み取ります。
        const filePath = '<FILE_PATH>';  // Replace the value with the actual file path.
        // 実際のファイルパスで値を置き換えます。
        // Check the file.
        // ファイルを確認します。
        if (!fs.existsSync(filePath)) {
            console.error('The file does not exist:', filePath);
            return;
        }
        // Create a stream and listen for stream errors.
        // ストリームを作成し、ストリームエラーをリッスンします。
        const fileStream = fs.createReadStream(filePath).on('error', (err) => {
            console.error('File stream errors:', err);
            process.exit(1);
        });

        let detectBodyCountAdvanceRequest = new $facebody20191230.DetectBodyCountAdvanceRequest({
            imageURLObject: fileStream,
        });
        let runtime = new $Util.RuntimeOptions({});
        try {
            // Send the request.
            // リクエストを送信します。
            const res = await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
            console.log(res);
        } catch (error) {
            if (error instanceof Error) {
                console.error('Error message:', error.message);
                const data = (error as any)?.data?.Recommend;
                if (typeof data === 'string') {
                    console.log('Suggestion:', data);
                }
            }
        }
    }
}

Client.main();

Node.js

'use strict';
const facebody20191230 = require('@alicloud/facebody20191230');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const fs = require('fs');

class Client {
  static createClient() {
    let config = new OpenApi.Config({
      // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
      accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
      // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
      accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    config.regionId = 'cn-shanghai';
    config.endpoint = 'facebody.cn-shanghai.aliyuncs.com';
    return new facebody20191230.default(config);
  }

  static async main() {
    let client = Client.createClient();
    // Read the file as a fileStream stream.
    // ファイルを fileStream ストリームとして読み取ります。
    const filePath = '<FILE_PATH>';  // Replace the value with the actual file path.
    // 実際のファイルパスで値を置き換えます。
    // Check the file.
    // ファイルを確認します。
    if (!fs.existsSync(filePath)) {
      console.error('The file does not exist:', filePath);
      return;
    }
    // Create a stream and listen for stream errors.
    // ストリームを作成し、ストリームエラーをリッスンします。
    const fileStream = fs.createReadStream(filePath).on('error', (err) => {
      console.error('File stream errors:', err);
      process.exit(1);
    });
    // Configure request parameters.
    // リクエストパラメータを構成します。
    let detectBodyCountAdvanceRequest = new facebody20191230.DetectBodyCountAdvanceRequest({
      imageURLObject: fileStream,
    });
    let runtime = new Util.RuntimeOptions({});
    try {
      // Send the request.
      // リクエストを送信します。
      const res = await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
      console.log(res);
    } catch (error) {
      // Handle exceptions with caution based on your actual business scenario and do not ignore exceptions in your project. The error messages displayed in this example are for reference only. 
      // 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
      console.log(error);
    }
  }
}

exports.Client = Client;
Client.main();

FAQ

  1. API オペレーションによってスローされた「You are not authorized to perform this operation」エラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

    考えられる原因: Resource Access Management (RAM) ユーザーの AccessKey ペアに、API オペレーションを呼び出す権限がありません。

    解決策: RAM ユーザーに必要な権限を付与します。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

    たとえば、SendMessageToGlobe API オペレーションによって「You are not authorized to perform this operation」エラーがスローされた場合は、次のカスタムポリシーを作成して、必要な権限を RAM ユーザーに付与します。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. API オペレーションによってスローされた「triggerUncaughtException Error: getaddrinfo ENOTFOUND」エンドポイントエラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

    考えられる原因: リクエストクライアントを初期化するときに指定したエンドポイントは、API オペレーションでサポートされていません。

    解決策: サポートされているエンドポイントを指定して、再試行します。詳細については、「エンドポイントを構成する」をご参照ください。

  3. API オペレーションによってスローされた「Cannot read properties of undefined (reading 'getCredential')」または「InvalidAccessKeyId.NotFound: code: 404」AccessKey エラーを処理するにはどうすればよいですか?

    考えられる原因と解決策

    考えられる原因: AccessKey ペアがリクエストに正しく渡されていません。

    解決策: リクエストクライアントを初期化するときに、AccessKey ペアが正しく渡されていることを確認します。 process.env("XXX")XXX 値は、環境変数から取得されます。

SDK 例外を処理する方法の詳細については、「FAQ」をご参照ください。