facets 示例源码
这些文件来自仓库的 examples/facets,可结合对应中文文档阅读和运行。
wrangler.jsonc
{
"name": "facets",
"main": "index.js",
"compatibility_date": "2026-01-01",
"worker_loaders": [{ "binding": "LOADER" }],
"durable_objects": {
"bindings": [{ "name": "SUPERVISOR", "class_name": "Supervisor" }]
},
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["Supervisor"] }]
}
index.js
import { DurableObject, WorkerEntrypoint } from "cloudflare:workers";
// facet 的代码。实际应用可以从打包文件、数据库或请求中加载;
// 这里用字符串保存,让整个示例位于同一个文件中。
const CODE = `
import { DurableObject } from "cloudflare:workers";
export class App extends DurableObject {
async fetch() {
const n = this.ctx.storage.kv.get("n") ?? 0;
this.ctx.storage.kv.put("n", n + 1);
const greeting = await this.env.GREETER.greet("facet");
return new Response(String(n) + ":" + greeting);
}
}
`;
export class Greeter extends WorkerEntrypoint {
greet(name) {
return `${this.ctx.props.greeting}, ${name}`;
}
}
export class Supervisor extends DurableObject {
fetch(request) {
const worker = this.env.LOADER.get("app-v1", () => ({
compatibilityDate: "2025-01-01",
mainModule: "app.js",
modules: { "app.js": CODE },
env: {
GREETER: this.ctx.exports.Greeter({
props: { greeting: "hello" },
}),
},
}));
const facet = this.ctx.facets.get("app", () => ({
class: worker.getDurableObjectClass("App"),
}));
return facet.fetch(request);
}
}
export default {
fetch(request, env) {
return env.SUPERVISOR.getByName("only").fetch(request);
},
};