Cloudflare KV 命名空间未绑定
Cloudflare KV namespace doesn't bind
运行 wrangler dev
而且它似乎没有绑定 Worker KV:
ERROR in /src/handler.ts
./src/handler.ts 16:8-17
[tsl] ERROR in /src/handler.ts(16,9)
TS2304: Cannot find name 'generalKV'.
这里是handler.ts
:
async function postHandler(request: Request): Promise<Response> {
let content = JSON.stringify(await request.json());
await generalKV.put([Date.now().toString()], JSON.stringify(content));
return new Response(content);
}
wrangler.toml
:
name = "general-assignment"
type = "javascript"
account_id = "<id>"
workers_dev = true
compatibility_date = "2021-11-01"
kv_namespaces = [
{ binding = "generalKV", id = "<id>", preview_id = "<id>" }
]
有人建议将 kv_namespaces
更改为 kv-namespaces
,但这对我不起作用。如果我遗漏了什么,请告诉我。
您是否已经在 Cloudflare 上手动创建了 KV 命名空间?我不相信它会从 worker 中的绑定设置动态创建它们(还)。
通过 Wrangler 创建的文档 -
https://developers.cloudflare.com/workers/cli-wrangler/commands#create
对于通过 Google 提出此问题并使用 Wrangler v2 并收到此错误的读者:
Uncaught (in promise) ReferenceError: MY_KV is not defined
教程和示例忽略了第二个参数(和第三个参数)。第二个参数包含 environment。您可以通过以下步骤使用并绑定到 kv
:
# Create the KV namespaces
wrangler kv:namespace create "MY_KV" &&\
wrangler kv:namespace create "MY_KV" --preview
wrangler
抱怨没有预览KV,所以两个都创建。接下来,创建一个 kv_namespaces
数组条目并复制默认 (dev) 部分中的 preview_id
(在下面表示为 yyyy
)。
# wrangler.toml
name = "worker"
main = "src/index.js"
compatibility_date = "2022-04-14"
account_id = "...."
workers_dev = true
routes = [
"exmample.com/*"
]
# Duplicate preview_id to id
kv_namespaces = [
{ binding = "MY_KV", preview_id = "yyyy", id = "yyyy" }
]
# Run `wrangler publish --env production` when happy
[env.production]
kv_namespaces = [
{ binding = "MY_KV", id = "xxxx" }
]
然后您可以像这样绑定到 kv:
# index.js
export default {
async fetch(request, env) {
...
const someKV = env.MY_KV.get("some-key");
...
}
运行 wrangler dev
而且它似乎没有绑定 Worker KV:
ERROR in /src/handler.ts
./src/handler.ts 16:8-17
[tsl] ERROR in /src/handler.ts(16,9)
TS2304: Cannot find name 'generalKV'.
这里是handler.ts
:
async function postHandler(request: Request): Promise<Response> {
let content = JSON.stringify(await request.json());
await generalKV.put([Date.now().toString()], JSON.stringify(content));
return new Response(content);
}
wrangler.toml
:
name = "general-assignment"
type = "javascript"
account_id = "<id>"
workers_dev = true
compatibility_date = "2021-11-01"
kv_namespaces = [
{ binding = "generalKV", id = "<id>", preview_id = "<id>" }
]
有人建议将 kv_namespaces
更改为 kv-namespaces
,但这对我不起作用。如果我遗漏了什么,请告诉我。
您是否已经在 Cloudflare 上手动创建了 KV 命名空间?我不相信它会从 worker 中的绑定设置动态创建它们(还)。
通过 Wrangler 创建的文档 -
https://developers.cloudflare.com/workers/cli-wrangler/commands#create
对于通过 Google 提出此问题并使用 Wrangler v2 并收到此错误的读者:
Uncaught (in promise) ReferenceError: MY_KV is not defined
教程和示例忽略了第二个参数(和第三个参数)。第二个参数包含 environment。您可以通过以下步骤使用并绑定到 kv
:
# Create the KV namespaces
wrangler kv:namespace create "MY_KV" &&\
wrangler kv:namespace create "MY_KV" --preview
wrangler
抱怨没有预览KV,所以两个都创建。接下来,创建一个 kv_namespaces
数组条目并复制默认 (dev) 部分中的 preview_id
(在下面表示为 yyyy
)。
# wrangler.toml
name = "worker"
main = "src/index.js"
compatibility_date = "2022-04-14"
account_id = "...."
workers_dev = true
routes = [
"exmample.com/*"
]
# Duplicate preview_id to id
kv_namespaces = [
{ binding = "MY_KV", preview_id = "yyyy", id = "yyyy" }
]
# Run `wrangler publish --env production` when happy
[env.production]
kv_namespaces = [
{ binding = "MY_KV", id = "xxxx" }
]
然后您可以像这样绑定到 kv:
# index.js
export default {
async fetch(request, env) {
...
const someKV = env.MY_KV.get("some-key");
...
}