INTEGRITY Dokumentace

Události fetch

HTTP Requests

Při každém HTTP požadavku se Request objekt je odeslán do vašeho workeru, poté vygenerovaný Response se vrací. Request objekt bude obsahovat cf objekt. Miniflare zaznamená metodu, cestu, stav a dobu, za kterou byla odpověď odeslána.

Pokud Worker při generování odpovědi vyvolá chybu, místo ní se vrátí chybová stránka obsahující stack trace.

Odesílání událostí

Při použití API dispatchFetch funkci lze použít k odeslání fetch události do vašeho Workeru. To lze použít k testování odpovědí. dispatchFetch má stejné API jako běžný fetch metoda: buď přijímá Request objekt, nebo URL a volitelný RequestInit objekt:

import { Miniflare, Request } from "miniflare";

const mf = new Miniflare({
	modules: true,
	script: `
  export default {
    async fetch(request, env, ctx) {
      const body = JSON.stringify({
        url: event.request.url,
        header: event.request.headers.get("X-Message"),
      });
      return new Response(body, {
        headers: { "Content-Type": "application/json" },
      });
    })
  }
  `,
});

let res = await mf.dispatchFetch("http://localhost:8787/");
console.log(await res.json()); // { url: "http://localhost:8787/", header: null }

res = await mf.dispatchFetch("http://localhost:8787/1", {
	headers: { "X-Message": "1" },
});
console.log(await res.json()); // { url: "http://localhost:8787/1", header: "1" }

res = await mf.dispatchFetch(
	new Request("http://localhost:8787/2", {
		headers: { "X-Message": "2" },
	}),
);
console.log(await res.json()); // { url: "http://localhost:8787/2", header: "2" }

Při odesílání událostí odpovídáte za přidání CF-* hlavičky a cf objekt. Díky tomu můžete jejich hodnoty pro účely testování ovládat:

const res = await mf.dispatchFetch("http://localhost:8787", {
	headers: {
		"CF-IPCountry": "GB",
	},
	cf: {
		country: "GB",
	},
});

Upstream

Miniflare zavolá každý fetch listener, dokud není vrácena odpověď. Pokud není odpověď vrácena nebo dojde k vyvolání výjimky a passThroughOnException() byla zavolána, odpověď se místo toho načte ze zadaného upstreamu:

import { Miniflare } from "miniflare";

const mf = new Miniflare({
	script: `
  addEventListener("fetch", (event) => {
    event.passThroughOnException();
    throw new Error();
  });
  `,
	upstream: "https://miniflare.dev",
});
// If you don't use the same upstream URL when dispatching, Miniflare will
// rewrite it to match the upstream
const res = await mf.dispatchFetch("https://miniflare.dev/core/fetch");
console.log(await res.text()); // Source code of this page