本文檔旨在為開發人員解答在使用Node.js SDK過程中所遇到的常見問題,以提升開發效率。
環境檢查
確保Node.js語言環境已經正確安裝,Node.js環境版本 >= 8.x。
確保您的網路能夠訪問阿里雲的API。
問題列表
常見問題與解決方案
問題1:AK傳參問題。
問題現象:代碼運行時報錯,報錯資訊中包含如下資訊時,表示AK未正確地設定阿里雲的憑證(AccessKey)。
V2.0 SDK:Cannot read properties of undefined (reading 'getCredential').
V1.0 SDK:AssertionError [ERR_ASSERTION]: must pass "config.accessKeyId".
解決方案:
執行以下命令,檢查您的環境變數中是否配置有ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET:
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%若返回正確的AccessKey,則說明配置成功。如果返回為空白或錯誤,請嘗試重新設定,具體操作請參見在Linux、macOS和Windows系統配置環境變數。
檢查代碼中AK相關內容是否存在錯誤。
常見的錯誤樣本:
let config = new OpenApi.Config({ accessKeyId: process.env['yourAccessKeyID'], accessKeySecret: process.env['yourAccessKeySecret'], });正確樣本:
let config = new OpenApi.Config({ accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], });說明process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']和process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
,表示是從環境變數中擷取ALIBABA_CLOUD_ACCESS_KEY_ID及ALIBABA_CLOUD_ACCESS_KEY_SECRET的值。
重要切勿直接線上上代碼中明文寫入 AccessKey,該寫法存在安全隱患。
問題2:在執行tsc命令時,提示tsc : 無法將“tsc”項識別為cmdlet、函數、指令檔或可執行程式的名稱...。

導致原因:
PATH 環境變數未正確配置:全域安裝的
tsc檔案路徑未添加到系統的 PATH 環境變數中。PowerShell 執行策略限制:PowerShell 的預設執行策略可能為
Restricted,禁止運行.ps1指令檔。PATH 環境變數未正確配置:全域安裝的
tsc檔案路徑(如D:\node.js\node_global)未添加到系統的 PATH 環境變數中。
解決方案:
檢查
TypeScript是否已全域安裝:npm list -g typescript如果輸出為空白或提示未安裝,則說明 TypeScript 未正確安裝。
執行命令
npm install -g typescript以進行全域安裝。執行以下命令擷取當前
npm的全域安裝路徑:npm config get prefix # 輸出樣本:D:\node.js\node_global根據上一步輸出的路徑,執行以下命令以檢查目錄下是否存在
tsc檔案:ls D:\node.js\node_global | Select-String 'tsc'查看當前
PowerShell的執行策略:Get-ExecutionPolicy如果輸出為
Restricted,說明 PowerShell 不允許運行指令碼。修改執行策略為
RemoteSigned,允許運行本地指令碼 :Set-ExecutionPolicy RemoteSigned -Scope CurrentUser再次執行
Get-ExecutionPolicy以驗證當前執行策略,輸出應為RemoteSigned。在終端中直接設定當前會話的 PATH:
$env:Path += ";D:\node.js\node_global"檢查 PATH 是否包含全域路徑:
$env:Path -split ';' | Select-String 'node_global'執行
tsc,將TypeScript代碼根據tsconfig.json設定檔將.ts(TypeScript)檔案編譯成.js(JavaScript)檔案。
請將樣本中的D:\node.js\node_global替換為您通過執行npm config get prefix所獲得的實際路徑。
問題3:調用API逾時,提示:”Error: connect ETIMEDOUT“?
逾時的常見原因與解決步驟:
逾時問題可能由多種因素引起,以下是一些常見的原因及相應的解決步驟:
1.網路連接問題
情況描述:用戶端與伺服器之間的網路不通或網路不穩定導致請求無法到達目標伺服器。
解決方案:
使用ping或curl命令測試本地主機與雲產品Endpoint之間連通性,例如調用傳送簡訊介面逾時時,使用ping dysmsapi.aliyuncs.com或curl -v https://dysmsapi.aliyuncs.com測試連通性。
若命令執行逾時或者無響應,請檢查本地防火牆或路由器中是否有阻斷策略。
若命令有響應,建議設定合理的逾時時間,避免因配置不當導致請求失敗,具體操作請參見逾時機制。範例程式碼如下:
JavaScript樣本
// 建立RuntimeObject執行個體並設定運行參數。 const runtime = new RuntimeOptions({ // 設定連線逾時時間 connectTimeout: 10000, });TypeScript樣本
// 建立RuntimeObject執行個體並設定運行參數。 const runtime = new $Util.RuntimeOptions({ // 設定連結逾時時間 connectTimeout: 10000, });
2.API處理時間過長
情況描述:目標API處理請求的時間超過了設定的讀逾時時間。
解決方案:通過配置或增加逾時時間來適應較長的API回應時間, 具體操作請參見逾時機制。例如通過配置讀逾時時間參數來延長當前請求的讀逾時時間,範例程式碼如下:
JavaScript樣本
// 建立RuntimeObject執行個體並設定運行參數。
const runtime = new RuntimeOptions({
// 設定讀取逾時時間
readTimeout: 10000,
});TypeScript樣本
// 建立RuntimeObject執行個體並設定運行參數。
const runtime = new $Util.RuntimeOptions({
// 設定讀取逾時時間
readTimeout: 10000,
});問題4:調用API時發生”MissingRequiredParameter“類型錯誤?
這裡以調用簡訊服務的傳送簡訊介面為例:
進入OpenAPI門戶的API調試頁面,選擇雲產品和介面。
仔細對比構造的請求對象(如
SendSmsRequest)是否填充了所有必需欄位,例如手機號、簽名等。參考API文檔確認必填項。確保必填參數值正確。
確保填寫的必填參數值正確無誤,例如手機號格式是否符合要求。
在調用 API 前,SDK 會對參數進行自動校正。如果缺少必要參數,您將收到類似
MissingRequiredParameter的錯誤提示。例如,如果手機號參數缺失,會報錯 “MissingPhoneNumbers: code: 400”。

JavaScript樣本
let sendSmsRequest = new Dysmsapi20170525.SendSmsRequest({
phoneNumbers: '<YOUR_VALUE>',
signName: '<YOUR_VALUE>',
templateCode: '<YOUR_VALUE>',
});TypeScript樣本
let sendSmsRequest = new $Dysmsapi20170525.SendSmsRequest({
phoneNumbers: "<YOUR_VALUE>",
signName: "<YOUR_VALUE>",
templateCode: "<YOUR_VALUE>",
});問題5:API 呼叫失敗,提示地區不支援,報錯”getaddrinfo ENOTFOUND“系統無法找到指定的主機名稱?
確保您所選地區支援您正在調用的服務。這裡以簡訊服務為例,查看產品的Endpoint可以通過OpenAPI 開發人員門戶的產品首頁中進行尋找確認,請確保填寫正確的Endpoint。

問題6:安裝SDK時, npm install 報錯?
首先確保 Node.js 和 npm 已正確安裝,具體操作步驟請參見安裝Node.js。
可能導致原因:
鏡像源配置衝突,全域 npm 配置使用了第三方鏡像源(如淘寶鏡像),但未針對
@alicloud範圍單獨設定官方源。緩衝或網路問題,npm 本機快取損壞或網路原則(如企業防火牆)攔截了對鏡像源的請求。
包版本不存在,指定版本(如
3.1.1)在鏡像源中不存在。
解決方案:
使用以下命令清理 npm 緩衝,修複可能的緩衝損壞問題,然後嘗試重新安裝。
npm cache clean --force直接使用npm官方源。
為
@alicloud範圍單獨設定官方源,運行以下命令,僅對@alicloud開頭的包使用 npm 官方源:npm config set @alicloud:registry=https://registry.npmjs.org檢查 npm 配置,確保範圍源生效:
npm config get @alicloud:registry # 輸出應為 https://registry.npmjs.org重新執行
npm install @alicloud/XXX命令安裝SDK。
檢查阿里雲鏡像源,可嘗試臨時切換(可選)。
# 以安裝簡訊SDK為例 npm install @alicloud/dysmsapi20170525@3.1.1 --registry=https://registry.npmmirror.com
安裝成功後,npm 提示類似於9 vulnerabilities (6 moderate, 3 high)的警告:
問題原因:SDK 依賴的第三方包(如 axios、lodash 等)版本過舊,存在已知漏洞。
解決方案:運行npm audit fix命令嘗試自動修複。npm 自動升級可相容的安全版本,漏洞數量減少或歸零。
問題7:依賴包版本出現衝突?
使用
npm ls命令查看依賴樹,確保沒有版本衝突。可以刪除
node_modules目錄和package-lock.json檔案,並重新安裝依賴:
rm -rf node_modules package-lock.json
npm installNode.js語言基礎異常自查表
錯誤碼 | 錯誤原因 | 解決方案 |
TypeError | 在變數或運算式的類型不符合預期時發生異常。 | 檢查變數或運算式的資料類型,並確保與預期的類型一致。可以使用條件陳述式或類型檢查方法(如 typeof)來處理類型錯誤。 |
SyntaxError | 在代碼的文法不合法時發生異常。 | 檢查代碼的文法,確保文法正確。可以使用代碼編輯器或開發工具來檢測和糾正語法錯誤。 |
ReferenceError | 在引用一個不存在的變數時發生異常。 | 確保引用的變數已經定義和初始化。可以使用條件陳述式或異常處理機制來處理引用錯誤。 |
RangeError | 在數字超出有效範圍時發生異常,如數組訪問越界、函數遞迴調用過多等。 | 確保數字在有效範圍內,如數組索引在有效範圍內、控制函數遞迴的深度等。可以使用條件陳述式或異常處理機制來處理範圍錯誤。 |
URIError | 在使用不合法的 URI 或編碼時發生異常。 | 確保使用合法的 URI 或編碼,並遵循相關規範。可以使用條件陳述式或特定的 URI 編碼方法來處理 URI 錯誤。 |
支援人員
以上問題的解決方案旨在協助您更友好地使用阿里雲SDK。如果您在使用過程中遇到其他問題,請通過以下方式與我們聯絡:
提交工單:阿里雲提交工單頁面。