疑難排解 Azure Functions 中的 Node.js 應用程式
重要
本文的內容會根據您在頁面頂端選取器中選擇的 Node.js 程式設計模型而有所不同。 v4 模型已正式推出,旨在為 JavaScript 和 TypeScript 開發人員提供更靈活且更直覺的體驗。 在移轉指南中深入了解 v3 與 v4 之間的差異。
本文提供指引以疑難排解 Node.js 函數應用程式中的常見案例。
在 Azure 入口網站中的 [診斷和解決問題] 索引標籤是監視和診斷應用程式相關問題的實用資源。 它也會根據診斷為您的問題提供可能的解決方案。 如需詳細資訊,請參閱 Azure Functions 應用程式診斷 (部分機器翻譯)。
另一個針對 Application Insights 執行個體的實用資源是 Azure 入口網站中的 [記錄] 索引標籤,讓您可以執行自訂 KQL 查詢。 下列範例查詢示範如何檢視前一天您應用程式中的錯誤和警告:
let myAppName = "<your app name>";
let startTime = ago(1d);
let endTime = now();
union traces,requests,exceptions
| where cloud_RoleName =~ myAppName
| where timestamp between (startTime .. endTime)
| where severityLevel > 2
如果上述資源無法解決問題,下列各節提供針對特定應用程式問題的建議:
找不到任何函數
如果您在記錄中看到下列任何錯誤:
找不到 HTTP 觸發程序。
找不到作業函數。 請嘗試公開您的作業類別和方法。 如果您是使用繫結延伸模組 (例如 Azure 儲存體、ServiceBus、計時器等),請確定您已在啟動程式碼 (例如 builder.AddAzureStorage()、builder.AddServiceBus()、builder.AddTimers() 等等) 中呼叫延伸模組的註冊方法。
請嘗試下列修正:
- 在本機執行時,請確定您是使用 Azure Functions Core Tools v4.0.5382 或更高版本。
- 在 Azure 中執行時:
請確定您是使用 Azure Functions 執行階段版本 4.25 或更高版本。
請確定您是使用 Node.js v18 或更高版本。
將應用程式設定
FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERROR
設為true
。 此設定是針對所有模型 v4 應用程式所建議,並可確保應用程式深入解析記錄中會顯示所有進入點錯誤。 如需詳細資訊,請參閱 Azure Functions 的應用程式設定參考。檢查函數應用程式記錄中是否有進入點錯誤。 下列範例查詢示範如何檢視前一天您應用程式中的進入點錯誤:
let myAppName = "<your app name>"; let startTime = ago(1d); let endTime = now(); union traces,requests,exceptions | where cloud_RoleName =~ myAppName | where timestamp between (startTime .. endTime) | where severityLevel > 2 | where message has "entry point"
- 請確定您的應用程式具有必要的資料夾結構,其中根有 host.json,以及每個函數包含 function.json 檔案的資料夾。
Undici 要求不是建構函式
如果您在函數應用程式記錄檔中收到下列錯誤:
System.Private.CoreLib: 例外狀況 (執行函數時): Functions.httpTrigger1。 System.Private.CoreLib: 結果: 錯誤例外狀況: undici_1.Request 不是建構函式
請確定您是使用 Node.js 版本 18 或更高版本。
無法偵測 Azure Functions 執行階段
如果您在函數應用程式記錄檔中收到下列錯誤:
錯誤: 無法偵測 Azure Functions 執行階段。 將「@azure/functions」套件切換至測試模式 - 不支援所有功能。
請檢查您的 package.json
檔案,以取得 applicationinsights
的參考並確定版本為 ^2.7.1
或更高版本。 在更新版本之後,請執行 npm install
取得 Microsoft 的協助
您可以透過下列其中一種方式以從 Microsoft 取得更多協助:
- 在 Azure Functions Node.js 存放庫中搜尋已知問題。 如果您沒有看到您的問題受提及,請建立新的問題,並讓我們知道發生了什麼事。
- 如果無法使用本指南診斷您的問題,Microsoft 支援工程師可提供協助診斷應用程式的問題。 Microsoft 提供各種支援計劃。 在 Azure 入口網站中函數應用程式頁面的支援 + 疑難解答區段中,建立支援票證。