R2D1 / 文档
TypeScript
TypeScript 包通过一个集合 API 连接 R2 文档存储和 D1 索引。选择运行时适配器,并提供 schema 与 document codec。
安装
Node.js 适配器需要 Node.js 22 或更高版本。Cloudflare Workers 使用 Workers 子路径。
npm install @nexcraft-dev/r2d1Node.js
使用 Node.js 的 R2 和 D1 适配器。以下代码假定 r2Config、d1Config、schema 和 codec 已配置。
import { R2D1 } from "@nexcraft-dev/r2d1";
import { NodeR2DocumentStore, NodeD1IndexStore } from "@nexcraft-dev/r2d1/node";
const users = await new R2D1(
new NodeR2DocumentStore(r2Config),
new NodeD1IndexStore(d1Config),
).collection(schema, codec);
await users.put({ id: "user-1", country: "NZ", score: 4.5 });
const page = await users
.query().where("country").eq("NZ")
.sortBy("score", "DESC").limit(20).fetch();Cloudflare Workers
将 R2 bucket 绑定为 DOCUMENTS,将 D1 database 绑定为 INDEXES,然后传给 Workers 适配器。
import { R2D1 } from "@nexcraft-dev/r2d1";
import {
WorkersR2DocumentStore,
WorkersD1IndexStore,
} from "@nexcraft-dev/r2d1/workers";
const users = await new R2D1(
new WorkersR2DocumentStore(env.DOCUMENTS),
new WorkersD1IndexStore(env.INDEXES),
).collection(schema, codec);Java 数据兼容性
R2 key、D1 table、index 和 cursor 格式遵循 Java 契约。文档字节格式由应用决定:Java 没有默认格式。请使用能读写相同字节的 TypeScript codec。jsonCodec 是可选项,且不支持 bigint。TypeScript 的 long 字段使用 bigint。
完整示例
仓库提供完整的 Node.js、Workers 和共享 codec 示例。
