Resolver problemas em aplicações Node.js no Funções do Azure

Importante

O conteúdo deste artigo muda com base na sua escolha do modelo de programação Node.js no seletor na parte superior da página. O modelo v4 está geralmente disponível e foi projetado para ter uma experiência mais flexível e intuitiva para desenvolvedores JavaScript e TypeScript. Saiba mais sobre as diferenças entre v3 e v4 no guia de migração.

Este artigo fornece um guia para resolver cenários comuns em Node.js aplicações funcionais.

O separador Diagnosticar e resolver problemas no portal do Azure é um recurso útil para monitorizar e diagnosticar possíveis problemas relacionados com a sua aplicação. Também fornece potenciais soluções para os seus problemas com base no diagnóstico. Para mais informações, consulte Diagnósticos da app do Azure Functions.

Outro recurso útil é o separador Logs no portal do Azure para a sua instância do Application Insights, para que possa executar consultas KQL personalizadas. A seguinte consulta de exemplo mostra como visualizar erros e avisos da sua aplicação no último dia:

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

Se esses recursos não resolveram o seu problema, as secções seguintes fornecem conselhos para questões específicas de aplicação:

Nenhuma função encontrada

Se vir algum dos seguintes erros nos seus registos:

Não foram encontrados gatilhos HTTP.

Nenhuma função de trabalho encontrada. Experimente tornar públicas as suas classes de tarefa e métodos. Se estiveres a usar extensões de associação (por exemplo, Armazenamento do Azure, ServiceBus, Timers, etc.), certifica-te de que chamaste o método de registo da(s) extensão(ões) no teu código de inicialização (por exemplo, builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

Experimente as seguintes soluções:

  • Ao correr localmente, certifique-se de que está a usar o Funções do Azure Core Tools v4.0.5382 ou superior.
  • Ao correr no Azure:
    • Certifica-te de que estás a usar a versão do runtime do Funções do Azure 4.25 ou posterior.

    • Certifica-te de que estás a usar Node.js v18 ou superior.

    • Defina as definições FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERROR da aplicação para true. Esta configuração é recomendada para todas as aplicações modelo v4 e garante que todos os erros de entrada são visíveis nos registos de insights da sua aplicação. Para obter mais informações, consulte Referência de configurações de aplicativo para o Funções do Azure.

    • Verifica os registos da tua app de funções para erros nos pontos de entrada. A consulta de exemplo seguinte mostra como visualizar erros no ponto de entrada para a sua aplicação no último dia:

      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"
      
  • Certifica-te de que a tua aplicação tem a estrutura de pastas necessária com uma host.json na raiz e uma pasta para cada função contendo um ficheirofunction.json .

A solicitação Undici não é um construtor

Se aparecer o seguinte erro nos registos da sua aplicação de funções:

System.Private.CoreLib: Exceção durante a execução da função: Functions.httpTrigger1. System.Private.CoreLib: Resultado: Exceção de falha: undici_1.Request não é um construtor

Certifica-te de que estás a usar Node.js versão 22.x ou superior.

Falhou a deteção do runtime do Funções do Azure

Se aparecer o seguinte erro nos registos da sua aplicação de funções:

AVISO: Falhou a deteção do runtime do Funções do Azure. Mudar o pacote "@azure/functions" para o modo de teste - nem todas as funcionalidades são suportadas.

Verifique o ficheiro package.json para ver se existe uma referência a applicationinsights e certifique-se de que a versão é ^2.7.1 ou superior. Depois de atualizar a versão, execute npm install

Fluxos HTTP que não funcionam

Se o streaming HTTP não estiver a funcionar:

  • Verifique @azure/functions se a versão do pacote é 4.3.0 ou posterior.
  • Certifique-se de que a versão de runtime do Funções do Azure é 4.28 ou posterior.
  • Verifique se app.setup({ enableHttpStream: true }) é chamado.
  • O Verify FUNCTIONS_REQUEST_BODY_SIZE_LIMIT está configurado adequadamente para grandes volumes de dados.

Ganchos não executados

Se os seus hooks não estiverem a ser executados:

  • Confirma que estás a usar o modelo de programação v4.
  • Verifique a sintaxe de registo do hook: app.hook.preInvocation() ou app.hook.appStart().
  • Verifica se registas os ganchos antes das definições de funções.
  • Revise o filtro de gatilhos se os hooks só devem funcionar para tipos específicos de funções.

Problemas de compilação do TypeScript

Para problemas específicos do TypeScript:

Falhas na compilação:

  • Verifica se tsconfig.json tem o outDir corretamente apontado para a saída da compilação
  • Assegurar que scriptFile no modelo v3 aponta para ficheiros compilados .js, não .ts
  • Verifique se todas as dependências do TypeScript estão instaladas: npm install --save-dev typescript @types/node

Erros de tipo:

  • Atualizar o pacote @azure/functions para as definições de tipos mais recentes
  • Utilize importações adequadas: import { app, HttpRequest, InvocationContext } from '@azure/functions'
  • Verificar se as assinaturas de funções correspondem aos tipos esperados

Problemas de resolução de módulos

Não se encontram erros de módulo:

  • Execute npm install para garantir que todas as dependências estão instaladas
  • A pasta Check node_modules existe no pacote de implementação
  • Para módulos ES, certifique-se de que os nomes de ficheiro usam .mjs extensão ou package.json tem "type": "module"
  • Verifique se os caminhos de importação relativos estão corretos após a compilação do TypeScript

Questões de ambiente e configuração

Variáveis de ambiente em falta:

  • Adicionar variáveis a local.settings.json para desenvolvimento local
  • Definir Definições de Aplicação no portal Azure para implementação na cloud
  • Utilização process.env["VARIABLE_NAME"] para aceder a valores

Problemas de registo:

  • Use context.log() em vez de console.log() para registos específicos de função
  • Verifique se a cadeia de ligação do Application Insights está configurada
  • Verifique os níveis de registo em host.json para filtrar

Obtenha ajuda da Microsoft

Pode obter mais ajuda da Microsoft de uma das seguintes formas:

  • Pesquise os problemas conhecidos no repositório Funções do Azure Node.js. Se não vires o teu problema mencionado, cria um novo e diz-nos o que aconteceu.
  • Se não conseguir diagnosticar o seu problema com este guia, os engenheiros de suporte da Microsoft estão disponíveis para ajudar a diagnosticar problemas na sua aplicação. A Microsoft oferece vários planos de suporte. Crie um ticket de suporte na secção de Suporte + resolução de problemas da página da sua aplicação de funções no portal Azure.

Passos seguintes