使用wrangler dev运行Worker时提示sonarkv未定义的问题排查
问题
我已查阅所有相关文档及Stack Overflow帖子,但使用wrangler dev本地运行Cloudflare Worker时仍提示**"sonarkv is not defined"**。已执行的操作如下:
- 创建预览命名空间:
$ wrangler kv:namespace create "sonarkv" --preview - 添加配置至
wrangler.toml:kv_namespaces = [ { binding = "sonarkv", id = "5138eb663ac04eb6af5fe72d11966626", preview_id = "67e98d40e1e74329bf2c30dd92289fce" } ] - 验证命名空间:
执行$ wrangler kv:key list --binding sonarkv --preview返回包含somekey的列表,$ wrangler kv:key get somekey --binding sonarkv --preview返回正确值。 - 在Worker脚本中引用:
const secret = await sonarkv.get("somekey"); - 当前Wrangler版本为3.9.0。
疑问:是否遗漏了操作步骤?是否需要在控制台单独绑定预览命名空间?尝试绑定提示**"A variable with that name already exists"**。
解决方法
检查Worker脚本语法模式
如果你的Worker使用ES模块语法,必须通过env参数访问KV绑定,不能直接调用全局变量:export default { async fetch(request, env) { const secret = await env.sonarkv.get("somekey"); // 后续业务逻辑 } };只有旧版Service Worker语法才支持直接使用全局绑定变量。
重启本地开发进程
修改wrangler.toml后,必须重启wrangler dev服务,否则新的绑定配置不会生效。确认配置文件位置
确保wrangler.toml放在Worker项目的根目录,避免被子目录的配置文件覆盖,Wrangler只会加载根目录的配置。核对命名空间ID
再次检查wrangler.toml中的id和preview_id,确保和创建命名空间时返回的ID完全一致,无拼写错误。无需重复绑定
控制台提示变量已存在,说明绑定已生效,不需要再手动在控制台操作,绑定是通过wrangler.toml同步到云端的。
内容的提问来源于stack exchange,提问作者John Scalo
相关产品推荐
相关产品推荐

