Řešení potíží s aplikacemi Node.js v Azure Functions

Important

Obsah tohoto článku se změní na základě vašeho výběru programovacího modelu Node.js v selektoru v horní části stránky. Model v4 je obecně dostupný a je navržený tak, aby měl flexibilnější a intuitivnější prostředí pro vývojáře v JavaScriptu a TypeScriptu. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.

Tento článek poskytuje návod k řešení běžných problémů v aplikacích funkcí v Node.js.

Karta Diagnostika a řešení problémů na portálu Azure je užitečným prostředkem k monitorování a diagnostice možných problémů souvisejících s vaší aplikací. Poskytuje také potenciální řešení vašich problémů na základě diagnostiky. Pro více informací, podívejte se na diagnostika aplikací Azure Functions.

Dalším užitečným prostředkem je karta Protokoly na portálu Azure pro vaši instanci Application Insights, abyste mohli spouštět vlastní dotazy KQL. Následující ukázkový dotaz ukazuje, jak zobrazit chyby a upozornění aplikace za poslední den:

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

Pokud tyto prostředky váš problém nevyřeší, následující části poskytují rady pro konkrétní problémy s aplikacemi:

Nenašly se žádné funkce.

Pokud se v protokolech zobrazí některá z následujících chyb:

Nenašly se žádné triggery HTTP.

Nebyly nalezeny žádné pracovní funkce. Zkuste, aby vaše třídy a metody úloh byly veřejné. Pokud používáte rozšíření pro vazby (např. Azure Storage, ServiceBus, Timers atd.), ujistěte se, že jste ve spouštěcím kódu zavolali metodu registrace pro daná rozšíření (např. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers() atd.).

Vyzkoušejte následující opravy:

  • Při místním spuštění se ujistěte, že používáte Azure Functions Core Tools verze 4.0.5382 nebo novější.
  • Při spuštění v Azure:
    • Ujistěte se, že používáte Azure Functions Runtime verze 4.25 nebo vyšší.

    • Ujistěte se, že používáte Node.js v18 nebo vyšší.

    • Nastavte nastavení aplikace FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERROR na true. Toto nastavení se doporučuje pro všechny aplikace modelu v4 a zajišťuje, aby se v protokolech Application Insights zobrazovaly všechny chyby vstupních bodů. Další informace najdete v referenčních informacích k nastavení aplikace pro Azure Functions.

    • Zkontrolujte chyby vstupního bodu v protokolech aplikace funkcí. Následující příklad dotazu ukazuje, jak zobrazit chyby vstupního bodu pro vaši aplikaci za poslední den:

      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"
      
  • Ujistěte se, že aplikace má požadovanou strukturu složek s host.json v kořenovém adresáři a složku pro každou funkci, která obsahuje soubor function.json.

Undici request není konstruktor

Pokud se v protokolech aplikace funkcí zobrazí následující chyba:

System.Private.CoreLib: Výjimka při provádění funkce: Functions.httpTrigger1. System.Private.CoreLib: Výsledek: Výjimka selhání: undici_1.Request není konstruktor

Ujistěte se, že používáte Node.js verze 22.x nebo vyšší.

Nepodařilo se rozpoznat běhové prostředí Azure Functions

Pokud se v protokolech aplikace funkcí zobrazí následující chyba:

UPOZORNĚNÍ: Nepodařilo se zjistit modul runtime Azure Functions. Přepnutí balíčku @azure/functions do testovacího režimu – ne všechny funkce jsou podporované.

Zkontrolujte, zda váš soubor package.json obsahuje odkaz na applicationinsights, a ujistěte se, že verze je ^2.7.1 nebo vyšší. Po aktualizaci verze spusťte příkaz npm install

HTTP streamy nefungují

Pokud HTTP streamování nefunguje:

  • Ověřte @azure/functions verzi balíčku 4.3.0 nebo novější.
  • Ujistěte se, že verze modulu runtime Azure Functions je 4.28 nebo vyšší.
  • Zkontrolujte, zda je volána funkce app.setup({ enableHttpStream: true }).
  • Verify FUNCTIONS_REQUEST_BODY_SIZE_LIMIT je nastaven správně pro velká data.

Háky se neprovádějí

Pokud háčky neběží:

  • Ověřte si, že používáte programovací model v4.
  • Ověřte syntaxi registrace hooku: app.hook.preInvocation() nebo app.hook.appStart().
  • Zkontrolujte, že před definicemi funkcí registrujete hooky.
  • Zkontrolujte filtrování spouštěčů, zda by háky měly běžet jen u určitých typů funkcí.

Problémy s kompilací TypeScriptu

Pro specifické problémy TypeScriptu:

Selhání při sestavování:

  • Ověřte, že tsconfig.json má správné outDir, které ukazuje na výstup vašeho buildu.
  • Zajistěte, že scriptFile model ve v3 ukazuje na kompilované .js soubory, ne .ts
  • Zkontrolujte, zda jsou všechny závislosti TypeScriptu nainstalované: npm install --save-dev typescript @types/node

Typové chyby:

  • Aktualizovat @azure/functions balíček pro nejnovější definice typů
  • Používejte správné importy: import { app, HttpRequest, InvocationContext } from '@azure/functions'
  • Ověřte, že podpisy funkcí odpovídají očekávaným typům

Problémy řešení modulů

Nelze najít chyby modulů:

  • Spusťte npm install, aby byly nainstalovány všechny závislosti.
  • Zkontrolujte, zda složka node_modules existuje v balíčku pro nasazení
  • U ES modulů je důležité zajistit, aby názvy souborů používaly .mjs příponu nebo package.json mají "type": "module"
  • Ověřte správnost relativních importních cest po kompilaci TypeScriptu

Problémy s prostředím a konfigurací

Chybějící proměnné prostředí:

  • Přidat proměnné do local.settings.json pro místní vývoj
  • Nastavení aplikace v Azure portal pro nasazení do cloudu
  • Použití process.env["VARIABLE_NAME"] k přístupu k hodnotám

Problémy s logováním:

  • Použijte context.log() místo console.log() pro protokoly specifické pro funkci
  • Zkontrolujte, zda je připojovací řetězec pro Application Insights nakonfigurován
  • Ověřte v host.json úrovně logů pro filtrování

Získání nápovědy od Microsoft

Další pomoc můžete získat z Microsoft jedním z následujících způsobů:

  • Prohledejte známé problémy v úložišti Azure Functions Node.js. Pokud se váš problém nezmíní, vytvořte nový problém a dejte nám vědět, co se stalo.
  • Pokud se vám nedaří diagnostikovat váš problém pomocí této příručky, jsou k dispozici Microsoft technici podpory, kteří vám pomůžou diagnostikovat problémy s vaší aplikací. Microsoft nabízí různé plány podpory. Vytvořte lístek podpory v části Podpora a řešení potíží na stránce vaší aplikace funkcí na portálu Azure.

Další kroky