像下面这样指定添加到你环境中的 Durable Objects:
const mf = new Miniflare({
modules: true,
script: `
export class Object1 {
async fetch(request) {
...
}
}
export default {
fetch(request) {
...
}
}
`,
durableObjects: {
// 注意 Object1 是从主(字符串)脚本中导出的
OBJECT1: "Object1",
},
});默认情况下,Durable Object 数据存储在内存中。它会在重新加载之间保持持久,但不会跨不同的 Miniflare 实例持久。要启用对文件系统的持久化,请指定 Durable Object 持久化选项:
const mf = new Miniflare({
durableObjectsPersist: true, // 默认为 ./.mf/do
durableObjectsPersist: "./data", // 自定义路径
});为了进行测试,从 Worker 外部向你的 Durable Objects 发起请求很有用。你可以使用 getDurableObjectNamespace 方法来实现这一点。
import { Miniflare } from "miniflare";
const mf = new Miniflare({
modules: true,
durableObjects: { TEST_OBJECT: "TestObject" },
script: `
export class TestObject {
constructor(state) {
this.storage = state.storage;
}
async fetch(request) {
const url = new URL(request.url);
if (url.pathname === "/put") await this.storage.put("key", 1);
return new Response((await this.storage.get("key")).toString());
}
}
export default {
async fetch(request, env) {
const stub = env.TEST_OBJECT.getByName("test");
return stub.fetch(request);
}
}
`,
});
const ns = await mf.getDurableObjectNamespace("TEST_OBJECT");
const stub = ns.getByName("test");
const doRes = await stub.fetch("http://localhost:8787/put");
console.log(await doRes.text()); // "1"
const res = await mf.dispatchFetch("http://localhost:8787/");
console.log(await res.text()); // "1"Miniflare 支持用于访问其他脚本导出的 Durable Objects 的 script_name 选项。这需要挂载另一个 Worker,如 🔌 多 Workers 中所述。