Edge computing med Cloudflare Workers og Deno · leksjon

Databaseproxyer med Deno

Opprett effektive databaseproxyer med Deno og Workers for å koble til tradisjonelle eller serverløse databaser.

Leksjon 3 av 411 trinn

Databaseproxyer med Deno er en gratis leksjon i Edge computing med Cloudflare Workers og Deno på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Edge computing med Cloudflare Workers og Deno, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Edge computing med Cloudflare Workers og Deno inneholder totalt 4 leksjoner.

Hva er databaseproxyer?

Velkommen til leksjonen om databaseproxyer i Deno! En edge-databaseproxy fungerer som et mellomlag mellom applikasjonen (for eksempel en Cloudflare Worker) og databasen.

I stedet for at edge-funksjonen kobler seg direkte til databasen, kommuniserer den med proxyen. Proxyen håndterer deretter selve databasetilkoblingen.

  • Hvorfor bruke dem? De sentraliserer håndteringen av tilkoblinger, forbedrer sikkerheten og muliggjør datatransformasjon før dataene når databasen.

Hvorfor bruke Deno til proxyer?

Deno er et utmerket valg for å bygge slike databaseproxyer på edge-nettverket. Her er hvorfor:

  • Innebygd HTTP-server: Deno har en kraftig, innebygd webserver som egner seg perfekt til å håndtere proxyforespørsler.
  • Sikkerhetsmodell: Det detaljerte tillatelsessystemet innebærer at nettverks- eller filtilgang må gis uttrykkelig, noe som forbedrer sikkerheten.
  • Ytelse: Den raske oppstartstiden og effektive kjøretidsmiljøet i Deno gjør det egnet for responsive proxy-tjenester.
  • TypeScript først: Innebygd støtte for TypeScript hjelper Dem med å skrive mer robust og vedlikeholdbar kode for proxylogikken.

Den første Deno-proxyserveren

La oss begynne med å opprette en grunnleggende Deno HTTP-server. Denne serveren lytter etter innkommende forespørsler og svarer med en enkel melding, som utgangspunkt for proxyen.

Prøv å kjøre dette eksempelet:

Deno.serve(async (req) => {
  const url = new URL(req.url);
  if (url.pathname === "/") {
    return new Response("Deno Proxy is running!", { status: 200 });
  }
  return new Response("Not Found", { status: 404 });
}, { port: 8000 });

console.log("Deno proxy listening on http://localhost:8000");

Videresending av forespørsler til databasen

La oss nå endre Deno-proxyen slik at den videresender innkommende forespørsler til et «late som»-databaseendepunkt. I et virkelig scenario ville dette vært det faktiske database-API-et eller en tjeneste som samhandler med det.

Her bruker vi et offentlig JSONPlaceholder-API for å simulere et databasekall.

Deno.serve(async (req) => {
  // Mock database endpoint (e.g., a public API)
  const mockDbApi = "https://jsonplaceholder.typicode.com/posts";
  const url = new URL(req.url);

  // Construct the target URL for the actual database call
  let targetUrl = mockDbApi;
  if (url.pathname !== "/") {
    targetUrl += url.pathname; // Append path for specific resources
  }

  const proxyReq = new Request(targetUrl, {
    method: req.method,
    headers: req.headers, // Pass original headers
    body: req.body,       // Pass original body
  });

  try {
    const dbResponse = await fetch(proxyReq);
    // Add a custom header to indicate proxy processing
    const newResponse = new Response(dbResponse.body, dbResponse);
    newResponse.headers.set("X-Proxy-By", "Deno");
    return newResponse;
  } catch (error) {
    return new Response(`Proxy Error: ${error.message}`, { status: 500 });
  }
}, { port: 8000 });

console.log("Deno proxy forwarding on http://localhost:8000");

Behovet for tilkoblingspooling

Det er kostbart å opprette databasetilkoblinger. Serverløse funksjoner, som Cloudflare Workers, har ofte kort levetid og er tilstandsløse. Hvis hver Worker-instans åpner en ny tilkobling, kan grensen for antall databasetilkoblinger raskt nås.

Tilkoblingspooling er en teknikk der en pool med åpne, gjenbrukbare databasetilkoblinger vedlikeholdes. Når en forespørsel kommer inn, hentes en tilkobling fra poolen i stedet for å opprette en ny.

Proxyens rolle i pooling

En Deno-databaseproxy kan håndtere tilkoblingspooling effektivt. I motsetning til kortlivede Workers kan en Deno-proxy (for eksempel distribuert på Deno Deploy eller en vedvarende server) være en prosess med lang levetid.

Dette gjør det mulig å vedlikeholde og administrere en pool med databasetilkoblinger og betjene flere forespørsler fra ulike Workers uten å åpne og lukke tilkoblinger hele tiden. Det reduserer belastningen betydelig og forbedrer databasens ytelse og stabilitet.

Sikre databaseproxyen

Sikkerhet er avgjørende. Deno-proxyen fungerer som en inngangsport til databasen og må derfor sikres:

  • Skjul legitimasjon: Eksponer aldri rå databaselegitimasjon i Worker-koden. Proxyen bør lagre og bruke denne på en sikker måte.
  • Autentisering av proxyen: Implementer autentisering (for eksempel API-nøkler eller JWT-er) slik at Workers må autentisere seg for å få tilgang til selve proxyen. Dette sikrer at bare autoriserte edge-funksjoner kan sende forespørsler.
  • Tillatelser: Den eksplisitte tillatelsesmodellen i Deno er nyttig. Gi proxyen bare nettverkstilgang til databasen, ikke vilkårlig tilgang til internett.

Transformasjon av data på edge-nettverket

En Deno-proxy kan gjøre mer enn bare å videresende data – den kan også transformere dem. Det innebærer å endre forespørselsinnhold før det sendes til databasen eller å endre svar før de returneres til Workeren.

Dette er nyttig for å legge til metadata, filtrere sensitiv informasjon eller standardisere dataformater.

Deno.serve(async (req) => {
  const mockDbApi = "https://jsonplaceholder.typicode.com/posts";
  const url = new URL(req.url);
  let targetUrl = mockDbApi;

  // Only transform POST requests for simplicity
  if (req.method === "POST") {
    let requestBody = await req.json(); // Assuming JSON body
    requestBody.processedAt = new Date().toISOString(); // Add a timestamp
    requestBody.source = "edge-proxy"; // Add a source identifier

    const proxyReq = new Request(targetUrl, {
      method: req.method,
      headers: {
        ...req.headers,
        "Content-Type": "application/json" // Ensure correct type
      },
      body: JSON.stringify(requestBody), // Send modified body
    });
    const dbResponse = await fetch(proxyReq);
    return new Response(dbResponse.body, dbResponse);
  } else {
    // For other methods, just forward
    const dbResponse = await fetch(new Request(targetUrl, req));
    return new Response(dbResponse.body, dbResponse);
  }
}, { port: 8000 });

console.log("Deno proxy with data transformation on http://localhost:8000");

Flyt fra Worker til Deno-proxy

Hvordan vil en Cloudflare Worker samhandle med denne Deno-proxyen?

Workeren sender ganske enkelt en standard HTTP-forespørsel med fetch til endepunktet til Deno-proxyen. Hvis Deno-proxyen er distribuert på en plattform som Deno Deploy, vil den ha en offentlig URL.

Workeren sender forespørselen sin, Deno-proxyen behandler den (for eksempel ved å håndtere pooling, legge til sikkerhetstiltak og transformere data), og videresender den deretter til den faktiske databasen. Til slutt returneres databasens svar til Workeren.

Fordeler med Deno-proxyer?

Hvilke av følgende er fordeler ved å bruke en Deno-basert databaseproxy på edge-nettverket?

Oppsummering av leksjonen

I denne leksjonen utforsket vi hvordan effektive databaseproxyer kan opprettes med Deno. Vi lærte at Denos innebygde HTTP-server og sikkerhetsmodell gjør Deno ideelt for denne oppgaven.

  • Vi bygget en grunnleggende proxy som videresender forespørsler.
  • Vi forsto betydningen av tilkoblingspooling og proxyens rolle i dette.
  • Vi diskuterte hvordan proxyen kan sikres og hvordan data kan transformeres på edge-nettverket.
  • Til slutt så vi hvordan Cloudflare Workers kan samhandle med en slik proxy.

Dette mønsteret gir en kraftig måte å håndtere databaseinteraksjoner fra edge-applikasjonene på.

Gratis å komme i gang

Lær deg Edge computing med Cloudflare Workers og Deno med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
47

Ofte stilte spørsmål

Er leksjonen «Databaseproxyer med Deno» gratis?

Ja – hele teksten i «Databaseproxyer med Deno» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Edge computing med Cloudflare Workers og Deno-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Edge computing med Cloudflare Workers og Deno inneholder totalt 4 leksjoner.

Hva lærer jeg i «Databaseproxyer med Deno»?

Opprett effektive databaseproxyer med Deno og Workers for å koble til tradisjonelle eller serverløse databaser. Du øver på Edge computing med Cloudflare Workers og Deno med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Edge computing med Cloudflare Workers og Deno?

Ingen tidligere erfaring er nødvendig. Edge computing med Cloudflare Workers og Deno på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Databaseproxyer med Deno»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Edge computing med Cloudflare Workers og Deno-leksjonen?

Ja. Alle Edge computing med Cloudflare Workers og Deno-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Workers Sites og Pages
  2. Integrering av frontend-rammeverk
  3. Databaseproxyer med Deno
  4. Gjengivelse på serversiden på edge
← Tilbake til Edge computing med Cloudflare Workers og Deno