本節主要介紹V2.0 SDK的異常種類以及對異常的處理。
V2.0 Node.js SDK的異常統一返回Error來處理。SDK內部出現的異常可以細分為以下幾個Error:
UnretryableError:該異常主要是因為網路問題造成,一般是網路問題造成達到最大重試次數後拋出,可以通過
err.data.lastRequest
來查詢錯誤發生時的請求資訊。ResponseError:在SDK的請求中主要以業務報錯為主的異常,該異常的樣本中提供了三個參數為使用者排查問題提供協助:
code: OpenAPI業務報錯的錯誤碼。
message:OpenAPI業務報錯的錯誤資訊,其中會包含本次請求的RequestId。
data:OpenAPI報錯後服務端返回的詳細資料。
TypeScript樣本:
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526'; import * as $OpenApi from '@alicloud/openapi-client'; import * as $Util from '@alicloud/tea-util'; export default class Client { static async main(): Promise<void> { const config = new $OpenApi.Config({ // 從環境變數中擷取RAM使用者的AccessKey ID accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // 從環境變數中擷取RAM使用者的AccessKey Secret accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // 訪問的地區 regionId: 'cn-beijing', }); const client = new Ecs20140526(config); const request = new $Ecs20140526.DescribeRegionsRequest({ instanceChargeType: "PrePaid", }); // 建立RuntimeObject執行個體並設定運行參數。 const runtime = new $Util.RuntimeOptions(); try { const resp = await client.describeRegionsWithOptions(request, runtime); console.log(resp.headers); console.log(resp.body); } catch (err) { // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。 console.log(err.code); console.log(err.message); console.log(err.data); } } }
JavaScript樣本:
const { default: Ecs20140526, DescribeRegionsRequest } = require('@alicloud/ecs20140526'); const { Config } = require('@alicloud/openapi-client'); const { RuntimeOptions } = require('@alicloud/tea-util'); async function main() { const config = new Config({ // 從環境變數中擷取RAM使用者的AccessKey ID accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // 從環境變數中擷取RAM使用者的AccessKey Secret accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // 訪問的地區 regionId: 'cn-beijing', }); const client = new Ecs20140526(config); const request = new DescribeRegionsRequest({ instanceChargeType: "PrePaid", }); // 建立RuntimeObject執行個體並設定運行參數。 const runtime = new RuntimeOptions(); try { const resp = await client.describeRegionsWithOptions(request, runtime); console.log(resp.headers); console.log(resp.body); } catch (err) { // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。 console.log(err.code); console.log(err.message); console.log(err.data); } } main();