Rozwiązywanie problemów z aplikacjami Node.js w usłudze Azure Functions

Ważna

Zawartość tego artykułu zmienia się w zależności od wybranego modelu programowania Node.js w selektorze w górnej części strony. Model w wersji 4 jest ogólnie dostępny i zapewnia bardziej elastyczne i intuicyjne doświadczenie dla deweloperów języka JavaScript i TypeScript. Dowiedz się więcej o różnicach między wersjami v3 i v4 w przewodniku migracji.

Ten artykuł zawiera przewodnik rozwiązywania problemów z typowymi scenariuszami w aplikacjach funkcji Node.js.

Karta Diagnozowanie i rozwiązywanie problemów w portalu Azure jest przydatnym zasobem do monitorowania i diagnozowania możliwych problemów związanych z aplikacją. Dostarcza również potencjalne rozwiązania problemów na podstawie diagnozy. Aby uzyskać więcej informacji, zobacz Diagnostyka aplikacji funkcji Azure.

Innym przydatnym miejscem jest karta Dzienniki w portalu Azure dla wystąpienia usługi Application Insights, gdzie można uruchamiać niestandardowe zapytania KQL. Poniższe przykładowe zapytanie pokazuje, jak wyświetlać błędy i ostrzeżenia dla aplikacji w ciągu ostatniego dnia:

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

Jeśli te zasoby nie rozwiązały problemu, poniższe sekcje zawierają porady dotyczące określonych problemów z aplikacjami:

Nie znaleziono funkcji

Jeśli w dziennikach są widoczne jakiekolwiek z następujących błędów:

Nie znaleziono żadnych wyzwalaczy HTTP.

Nie znaleziono funkcji zadań. Spróbuj ustawić klasy zadań i metody jako publiczne. Jeśli używasz rozszerzeń powiązań (np. Azure Storage, ServiceBus, Timers itd.), upewnij się, że w kodzie startowym wywołano metodę rejestracji dla danego rozszerzenia (np. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers() itd.).

Wypróbuj następujące poprawki:

  • Podczas uruchamiania lokalnego upewnij się, że używasz narzędzi Azure Functions Core Tools w wersji 4.0.5382 lub nowszej.
  • Podczas uruchamiania w Azure:
    • Upewnij się, że używasz środowiska uruchomieniowego Azure Functions w wersji 4.25 lub nowszej.

    • Upewnij się, że używasz Node.js w wersji 18 lub nowszej.

    • Ustaw ustawienie FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERROR aplikacji na true. To ustawienie jest zalecane dla wszystkich aplikacji korzystających z modelu v4 i zapewnia, że wszystkie błędy punktu wejściowego są widoczne w dziennikach Application Insights. Aby uzyskać więcej informacji, zobacz Dokumentacja ustawień aplikacji dla usługi Azure Functions.

    • Sprawdź dzienniki aplikacji funkcji pod kątem błędów związanych z punktem wejścia. Poniższe przykładowe zapytanie pokazuje, jak wyświetlić błędy punktu wejścia w aplikacji z ostatniego dnia:

      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"
      
  • Upewnij się, że aplikacja ma wymaganą strukturę folderów z host.json w katalogu głównym i folderem dla każdej funkcji zawierającej plik function.json .

request Undici nie jest konstruktorem

Jeśli w dziennikach aplikacji funkcji pojawi się następujący błąd:

System.Private.CoreLib: Wyjątek podczas wykonywania funkcji: Functions.httpTrigger1. System.Private.CoreLib: Result: Failure Exception: undici_1.Request nie jest konstruktorem

Upewnij się, że używasz Node.js w wersji 22.x lub nowszej.

Nie można wykryć środowiska uruchomieniowego Azure Functions

Jeśli w dziennikach aplikacji funkcji pojawi się następujący błąd:

OSTRZEŻENIE: Nie można wykryć środowiska uruchomieniowego Azure Functions. Przełączanie pakietu "@azure/functions" na tryb testowy — nie wszystkie funkcje są obsługiwane.

Sprawdź plik package.json pod kątem odwołania do applicationinsights i upewnij się, że wersja to ^2.7.1 lub nowsza. Po zaktualizowaniu wersji uruchom polecenie npm install

Strumienie HTTP nie działają

Jeśli streaming HTTP nie działa:

  • Sprawdź, @azure/functions czy wersja pakietu to wersja 4.3.0 lub nowsza.
  • Upewnij się, że wersja środowiska uruchomieniowego Azure Functions to 4.28 lub nowsza.
  • Sprawdź, czy app.setup({ enableHttpStream: true }) jest wywoływane.
  • Sprawdź, czy FUNCTIONS_REQUEST_BODY_SIZE_LIMIT jest odpowiednio ustawiony dla dużych zbiorów danych.

Hooki nie są wykonywane

Jeśli hooki się nie uruchamiają:

  • Potwierdź, że używasz modelu programowania v4.
  • Weryfikuj składnię rejestracji hooków: app.hook.preInvocation() lub app.hook.appStart().
  • Sprawdź, czy rejestrujesz hooki przed definicjami funkcji.
  • Sprawdź filtrowanie wyzwalaczy, jeśli hooki mają działać tylko dla określonych typów funkcji.

Problemy z kompilacją TypeScript

W przypadku problemów specyficznych dla TypeScript:

Awarie buildów:

  • Sprawdź, czy tsconfig.json ma poprawne outDir wskazujące na wynik kompilacji.
  • Upewnij się scriptFile, że w modelu v3 wskazuje się na skompilowane pliki .js, a nie .ts
  • Sprawdź, czy wszystkie zależności TypeScript są zainstalowane: npm install --save-dev typescript @types/node

Błędy typu:

  • Aktualizuj @azure/functions pakiet o najnowsze definicje typów
  • Używaj odpowiednich importów: import { app, HttpRequest, InvocationContext } from '@azure/functions'
  • Sprawdź, czy sygnatury funkcji odpowiadają oczekiwanym typom

Problemy rozwiązywania modułów

Nie można znaleźć błędów modułów:

  • Uruchom, npm install aby upewnić się, że wszystkie zależności są zainstalowane
  • Sprawdź, czy folder node_modules istnieje w pakiecie wdrożenia
  • W przypadku modułów ES upewnij się, że nazwy plików mają rozszerzenie .mjs lub że plik package.json zawiera "type": "module"
  • Sprawdź, czy względne ścieżki importu są poprawne po kompilacji TypeScript

Problemy środowiskowe i konfiguracyjne

Brakujące zmienne środowiskowe:

  • Dodaj zmienne do local.settings.json na potrzeby lokalnego programowania
  • Ustaw ustawienia aplikacji w portalu Azure na potrzeby wdrożenia w chmurze
  • Wykorzystanie process.env["VARIABLE_NAME"] do dostępu do wartości

Problemy z logowaniem:

  • Zastosowanie context.log() zamiast console.log() dla logów specyficznych dla funkcji
  • Sprawdź, czy parametry połączenia usługi Application Insights są skonfigurowane
  • Sprawdź poziomy logów w host.json do filtrowania

Uzyskiwanie pomocy od Microsoft

Możesz uzyskać więcej pomocy od Microsoft w jeden z następujących sposobów:

  • Wyszukaj znane problemy w repozytorium Azure Functions Node.js. Jeśli nie widzisz wymienionego problemu, utwórz nowy problem i poinformuj nas o tym, co się stało.
  • Jeśli nie możesz zdiagnozować problemu, korzystając z tego przewodnika, Microsoft inżynierowie pomocy technicznej są dostępni, aby ułatwić diagnozowanie problemów z aplikacją. Microsoft oferuje różne plany pomocy technicznej. Utwórz bilet pomocy technicznej w sekcji Pomoc techniczna i rozwiązywanie problemów na stronie aplikacji funkcji w portalu Azure.

Następne kroki