LogoLandingMore
开发指南

修改数据库配置

配置 Cloudflare D1 数据库

概述

Wrangler 提供了一系列命令来管理您的 Cloudflare Workers。

本文档将指导您通过控制台命令配置 Cloudflare D1 数据库以及相关的存储服务。我们以 template-app 为例演示完整的配置流程(您可以将 template-app 替换为实际的项目名称)。

配置步骤详解

1、创建 D1 数据库

npx wrangler d1 create template-db

命令解释:

  • 作用:在 Cloudflare 创建一个新的 D1 数据库实例
  • template-db:数据库名称,可自定义
  • 返回:数据库 ID(用于后续配置)
  • 注意:数据库创建后名称无法更改

执行结果示例:

✅ Successfully created DB 'template-db'
Add the following to your configuration file in your d1_databases array:
[[d1_databases]]
binding = "DB"
database_name = "template-db"
database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

2、创建 KV namespace

npx wrangler kv namespace create template-kv

命令解释:

  • 作用:创建 Workers KV 命名空间用于键值存储
  • template-kv:KV 命名空间名称
  • 用途:存储简单的键值对数据、缓存、配置等
  • 返回:命名空间 ID

应用场景:

  • 缓存 API 响应数据
  • 存储用户会话信息
  • 配置信息存储
  • 全局状态管理

3、创建 R2 bucket

npx wrangler r2 bucket create template-bucket

命令解释:

  • 作用:创建 R2 对象存储桶
  • template-bucket:存储桶名称
  • 用途:存储文件、图片、视频等大型对象
  • 特点:与 AWS S3 API 兼容

应用场景:

  • 用户上传的文件存储
  • 静态资源托管
  • 备份文件存储
  • 媒体资源管理

4、更新 wrangler.jsonc 配置

重要提示: 以下配置文件中的占位符必须替换为实际值:

{
  "name": "template-app", // 项目名称,需要替换
  "d1_databases": [
    // D1 数据库配置
    {
      "binding": "DB", // 在代码中访问数据库的变量名
      "database_name": "template-db", // 数据库名称(步骤1中创建的)
      "database_id": "替换为步骤1返回的id", // 数据库唯一标识符
      "migrations_dir": "src/db/migrations" // 迁移文件目录
    }
  ],
  "kv_namespaces": [
    // KV 存储配置
    {
      "binding": "KV_BINDING", // 在代码中访问 KV 的变量名
      "id": "替换为步骤2返回的id" // KV 命名空间 ID
    }
  ],
  "r2_buckets": [
    // R2 存储配置
    {
      "binding": "BUCKET", // 在代码中访问 R2 的变量名
      "bucket_name": "template-bucket" // R2 存储桶名称
    }
  ]
}

配置说明:

D1 数据库配置:

  • binding: 代码中的环境变量名,通过 env.DB 访问
  • database_name: 可读的数据库名称
  • database_id: 唯一标识符,用于 API 调用
  • migrations_dir: Drizzle 迁移文件存放目录

KV 配置:

  • binding: 代码中通过 env.KV_BINDING 访问
  • id: KV 命名空间的唯一标识符

R2 配置:

  • binding: 代码中通过 env.BUCKET 访问
  • bucket_name: 存储桶名称

5、生成 Cloudflare 类型定义

pnpm cf-typegen

命令解释:

  • 作用:根据 wrangler.jsonc 配置生成 TypeScript 类型定义
  • 输出:cloudflare-env.d.ts 文件
  • 时机:每次更新 wrangler.jsonc 后都需要执行

生成的类型定义示例:

interface CloudflareEnv {
  DB: D1Database;
  KV_BINDING: KVNamespace;
  BUCKET: R2Bucket;
}

重要性:

  • 提供完整的 TypeScript 类型支持
  • 确保代码中正确访问 Cloudflare 资源
  • 避免运行时错误
  • 提供 IDE 智能提示

配置完成后的使用

配置完成后,您可以在 Worker 代码中通过环境变量访问这些资源:

// app/api/example/route.ts
import { NextRequest } from "next/server";
import { getCloudflareContext } from "@opennextjs/cloudflare";
 
export async function GET(request: NextRequest) {
  const { env } = await getCloudflareContext(request);
 
  // 访问 D1 数据库
  const result = await env.DB.prepare("SELECT * FROM users").all();
 
  // 访问 KV 存储
  const cache = await env.KV_BINDING.get("cache_key");
 
  // 访问 R2 存储
  const object = await env.BUCKET.get("file.txt");
 
  return new Response("Hello");
}

On this page