Compartir a través de


Uso del proxy de desarrollo con Azure Functions de JavaScript

Si compila Azure Functions con JavaScript y quiere usar el proxy de desarrollo, siga las instrucciones generales para usar el proxy de desarrollo con aplicaciones de Node.js.

Importante

Para evitar que Azure Functions falle al iniciarse, inicie Dev Proxy sin registrarlo como proxy del sistema, ya sea utilizando la opción --as-system-proxy false o configurando asSystemProxy en el archivo falsedevproxyrc.json. Si registra Dev Proxy como proxy del sistema, Azure Functions produce un error al iniciarse con un mensaje de error similar al siguiente:

Grpc.Core.RpcException: 'Status(StatusCode="Internal", Detail="Error starting gRPC call. HttpRequestException: Requesting HTTP version 2.0 with version policy RequestVersionOrHigher while unable to establish HTTP/2 connection.", DebugException="System.Net.Http.HttpRequestException: Requesting HTTP version 2.0 with version policy RequestVersionOrHigher while unable to establish HTTP/2 connection.")'

Para poder cambiar fácilmente entre el uso del proxy de desarrollo en desarrollo y no usarlo en producción, puede configurar mejor el proxy en la aplicación de Azure Functions mediante variables de entorno. Cambie el local.settings.json archivo para incluir la variable de HTTPS_PROXY entorno. Además, deshabilite la validación de certificados para permitir que la aplicación de Azure Functions confíe en el certificado autofirmado usado por el proxy de desarrollo.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "HTTPS_PROXY": "http://127.0.0.1:8000",
    "NODE_TLS_REJECT_UNAUTHORIZED": "0"
  }
}

En la aplicación de Azure Functions, use el process.env objeto para leer las variables de entorno y configurar el proxy para las solicitudes HTTP.

import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';

export async function MyFnHttpTrigger(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    const options = process.env.HTTPS_PROXY ? { agent: new HttpsProxyAgent(process.env.HTTPS_PROXY) } : {};
    const resp = await fetch('https://jsonplaceholder.typicode.com/posts', options);
    const data = await resp.json();
    return {
      status: 200,
      jsonBody: data
    };
};

app.http('MyFnHttpTrigger', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: MyFnHttpTrigger
});