Important
本文的內容會根據您在頁面頂端選取器中選擇的 Node.js 程式設計模型而有所不同。 v4 模型已正式推出,旨在為 JavaScript 和 TypeScript 開發人員提供更靈活且更直覺的體驗。 在移轉指南中深入了解 v3 與 v4 之間的差異。
本文提供了一套針對 Node.js 函式應用程式常見情境的故障排除指南。
Azure 入口網站中的「診斷與解決問題」分頁是監控與診斷與應用程式相關問題的實用資源。 它也會根據診斷,為您的問題提供潛在的解決方案。 更多資訊請參見 Azure 功能應用程式診斷。
另一個有用的資源是 Azure 入口網站的 Logs 標籤,針對你的 Application Insights 實例,這樣你可以執行自訂的 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、Timers 等),請確保你在啟動程式碼中呼叫了擴充功能的註冊方法(例如 builder。AddAzureStorage(), 建構器。AddServiceBus(), 建構器。AddTimers(),等等)。
試試以下修正方法:
- 本地執行時,請確保你使用的是 Azure Functions Core Tools v4.0.5382 或更高版本。
- 在 Azure 中運行時:
請確保你使用的是 Azure Functions Runtime 版本 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 不是建構子
請確定你使用的是 22.x 或更高版本 Node.js。
無法偵測 Azure Functions 執行階段
如果你在功能應用程式日誌中出現以下錯誤:
警告:未能偵測到 Azure Functions 執行時。 將「@azure/功能」套件切換到測試模式——並非所有功能都被支援。
檢查你的 package.json 檔案是否有參考資料 applicationinsights ,並確保版本是 ^2.7.1 或更高。 更新版本後,請執行 npm install
HTTP 串流無法運作
如果 HTTP 串流無法運作:
- 請確認
@azure/functions套件版本為 4.3.0 或更新版本。 - 確保 Azure Functions 運行時版本係 4.28 或更後版本。
- 檢查是否已呼叫
app.setup({ enableHttpStream: true })。 - Verify
FUNCTIONS_REQUEST_BODY_SIZE_LIMIT是針對大型資料設定的。
勾點未執行
如果您的勾點未執行:
- 確認你使用的是程式模型 v4。
- 驗證掛鉤註冊語法:
app.hook.preInvocation()或app.hook.appStart()。 - 檢查你在函式定義前是否註冊了掛鉤。
- 如果 Hook 只應針對特定函式類型執行,請檢查觸發條件篩選。
TypeScript 編譯問題
針對 TypeScript 特定問題:
建造失敗:
- 確認
tsconfig.json具有正確的outDir,並指向您的建置輸出 - 確保
scriptFilev3 中模型指向已編譯的.js檔案,而不是.ts - 檢查所有 TypeScript 相依套件是否已安裝:
npm install --save-dev typescript @types/node
類型錯誤:
- 更新
@azure/functions套件以支援最新型別定義 - 使用正確的匯入:
import { app, HttpRequest, InvocationContext } from '@azure/functions' - 驗證函式簽名是否符合預期類型
模組解析問題
找不到模組錯誤:
- 執行
npm install以確保所有相依性都已安裝 - 檢查部署套件中是否存在
node_modules資料夾 - 對於 ES 模組,請確保檔案名稱使用
.mjs副檔名,或在package.json中包含"type": "module" - 在 TypeScript 編譯後,確認相對匯入路徑是否正確
環境與設定問題
缺少環境變數:
- 加入變數
local.settings.json以促進局部發展 - 在 Azure 入口網站中設定用於雲端部署的應用程式設定
- 使用
process.env["VARIABLE_NAME"]來存取值
記錄問題:
- 函式專用記錄請使用
context.log(),不要使用console.log() - 檢查是否已設定 Application Insights 的連接字串
- 確認
host.json中用於篩選的記錄層級
尋求 Microsoft 的協助
你可以透過以下方式之一獲得 Microsoft 的更多協助:
- 在Azure Functions Node.js庫中搜尋已知問題。 如果你沒看到有人提到你的問題,請建立一個新問題並告訴我們發生了什麼事。
- 如果你無法透過本指南診斷問題,Microsoft 支援工程師隨時準備協助診斷你的應用程式問題。 Microsoft 提供多種支援方案。 在 Azure 入口網站功能應用程式頁面的支援+故障排除區建立支援工單。