Dela via


Använda Dev Proxy med JavaScript Azure Functions

Om du skapar Azure Functions med JavaScript och vill använda Dev Proxy följer du den allmänna vägledningen för att använda Dev Proxy med Node.js program.

Viktigt!

Om du vill förhindra att Azure Functions misslyckas vid start startar du Dev Proxy utan att registrera det som en systemproxy, antingen med hjälp --as-system-proxy false av alternativet eller genom att konfigurera asSystemProxy till false i devproxyrc.json filen. Om du registrerar Dev Proxy som en systemproxy misslyckas Azure Functions vid start med ett felmeddelande som liknar:

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.")'

För att enkelt kunna växla mellan att använda Dev Proxy under utveckling och inte använda den i produktion kan du konfigurera proxyn i Azure Functions-appen med hjälp av miljövariabler. local.settings.json Ändra filen så att den HTTPS_PROXY innehåller miljövariabeln. Inaktivera dessutom certifikatverifiering så att Azure Functions-appen kan lita på det självsignerade certifikat som används av Dev Proxy.

{
  "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"
  }
}

I Azure Functions-appen använder du process.env objektet för att läsa miljövariablerna och konfigurera proxyn för dina HTTP-begäranden.

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
});