← Cloudflare Workers / workers / testing / miniflare / core
Несколько Workers
Miniflare позволяет запускать несколько Workers в одном экземпляре. Все Workers можно определить на одном уровне с помощью workers опцию.
Ниже приведён пример, где привязка службы используется для увеличения значения в общем пространстве имён KV:
import { Miniflare, Response } from "miniflare";
const message = "The count is ";
const mf = new Miniflare({
// Options shared between workers such as HTTP and persistence configuration
// should always be defined at the top level.
host: "0.0.0.0",
port: 8787,
kvPersist: true,
workers: [
{
name: "worker",
kvNamespaces: { COUNTS: "counts" },
serviceBindings: {
INCREMENTER: "incrementer",
// Service bindings can also be defined as custom functions, with access
// to anything defined outside Miniflare.
async CUSTOM(request) {
// `request` is the incoming `Request` object.
return new Response(message);
},
},
modules: true,
script: `export default {
async fetch(request, env, ctx) {
// Get the message defined outside
const response = await env.CUSTOM.fetch("http://host/");
const message = await response.text();
// Increment the count 3 times
await env.INCREMENTER.fetch("http://host/");
await env.INCREMENTER.fetch("http://host/");
await env.INCREMENTER.fetch("http://host/");
const count = await env.COUNTS.get("count");
return new Response(message + count);
}
}`,
},
{
name: "incrementer",
// Note we're using the same `COUNTS` namespace as before, but binding it
// to `NUMBERS` instead.
kvNamespaces: { NUMBERS: "counts" },
// Worker formats can be mixed-and-matched
script: `addEventListener("fetch", (event) => {
event.respondWith(handleRequest());
})
async function handleRequest() {
const count = parseInt((await NUMBERS.get("count")) ?? "0") + 1;
await NUMBERS.put("count", count.toString());
return new Response(count.toString());
}`,
},
],
});
const res = await mf.dispatchFetch("http://localhost");
console.log(await res.text()); // "The count is 3"
await mf.dispose();Маршрутизация
Маршрутизацию можно включить, указав routes через API,
используя
стандартный синтаксис маршрутов.
Обратите внимание: номера портов игнорируются:
const mf = new Miniflare({
workers: [
{
scriptPath: "./api/worker.js",
routes: ["http://127.0.0.1/api*", "api.mf/*"],
},
],
});Если вы используете имена хостов, которые не localhost или 127.0.0.1, вам
может понадобиться отредактировать на своём компьютере hosts файле, чтобы эти имена хостов указывали на
localhost. В Linux и macOS это обычно находится по пути /etc/hosts. В Windows,
это находится по пути C:\Windows\System32\drivers\etc\hosts. Для указанных выше маршрутов
нужно добавить в файл следующие записи:
127.0.0.1 miniflare.test
127.0.0.1 api.mfТакже вы можете настроить Host заголовок при отправке запроса:
# Dispatches to the "api" worker
$ curl "http://localhost:8787/todos/update/1" -H "Host: api.mf"При использовании API Miniflare определяет, какому Worker передать запрос, по его URL.
// Dispatches to the "api" worker
const res = await mf.dispatchFetch("http://api.mf/todos/update/1", { ... });Durable Objects
Miniflare поддерживает script_name параметр для доступа к Durable Objects,
экспортированным другими скриптами. См.
📌 Durable Objects
дополнительные сведения.