跳转到内容
搜索文档

KV 绑定(binding)

最后更新 查看 MarkdownAgent 设置

KV 绑定(binding) 允许 Worker 与 KV 命名空间之间进行通信。

Wrangler 配置文件 中配置 KV 绑定(binding)。

从 Workers 访问 KV

KV 命名空间 是一种复制到 Cloudflare 全球网络的键值数据库。

要从 Worker 内部连接到 KV 命名空间,必须定义一个指向该命名空间 ID 的绑定(binding)。

绑定的名称不需要与 KV 命名空间的名称匹配。相反,绑定应该是有效的 JavaScript 标识符,因为该标识符将作为全局变量存在于 Worker 中。

KV 命名空间有你选择的名称(例如 My tasks)和分配的 ID(例如 06779da6940b431db6e566b4846d64db)。

要执行 Worker,请定义绑定(binding)。

在以下示例中,绑定称为 TODO。在 Wrangler 配置文件的 kv_namespaces 部分,添加:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "worker",
	// ...
	"kv_namespaces": [
		{
			"binding": "TODO",
			"id": "06779da6940b431db6e566b4846d64db"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "worker"

[[kv_namespaces]]
binding = "TODO"
id = "06779da6940b431db6e566b4846d64db"

部署后,Worker 将在其环境对象(fetch() 请求处理程序的第二个参数)中拥有 TODO 字段。TODO 绑定上的任何方法都将映射到 ID 为 06779da6940b431db6e566b4846d64db 的 KV 命名空间——即你之前称为 My Tasks 的命名空间。

export default {
  async fetch(request, env, ctx) {
    // Get the value for the "to-do:123" key
    // NOTE: Relies on the `TODO` KV binding that maps to the "My Tasks" namespace.
    let value = await env.TODO.get("to-do:123");

    // Return the value, as is, for the Response
    return new Response(value);
  },
};

本地开发时使用 KV 绑定(binding)

当你使用 Wrangler 通过 wrangler dev 命令进行本地开发时,Wrangler 默认使用 KV 的本地版本,以避免干扰 KV 中的任何实时生产数据。这意味着读取你未在本地写入的键将返回 null

要让 wrangler dev 连接到在 Cloudflare 全球网络上运行的 Workers KV 命名空间,请在 KV 绑定(binding)配置中设置 "remote" : true。有关更多信息,请参阅远程绑定(binding)文档

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "worker",
	// ...
	"kv_namespaces": [
		{
			"binding": "TODO",
			"id": "06779da6940b431db6e566b4846d64db"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "worker"

[[kv_namespaces]]
binding = "TODO"
id = "06779da6940b431db6e566b4846d64db"

从 Durable Objects 和使用 ES modules 格式的 Workers 访问 KV

Durable Objects 使用 ES modules 格式。绑定(binding)不是全局变量,而是作为传递给构造函数env 参数的属性提供。

示例如下:

import { DurableObject } from "cloudflare:workers";

export class MyDurableObject extends DurableObject {
  constructor(ctx, env) {
    super(ctx, env);
  }

  async fetch(request) {
    const valueFromKV = await this.env.NAMESPACE.get("someKey");
    return new Response(valueFromKV);
  }
}

这篇文档对您有帮助吗?