数据库
Nuxt 模板中的 Drizzle ORM 与 PostgreSQL 配置。
数据库层已集成:通过 node-postgres 在 PostgreSQL 上使用
Drizzle ORM,包含认证与支付 schema。Postgres +
Drizzle 是唯一打通的路径 —— Prisma 占位已移除。
关键文件
| 文件 | 作用 |
|---|---|
server/database/drizzle/client.ts | 创建 Drizzle 客户端:drizzle(runtimeConfig.databaseUrl) |
server/database/index.ts | 重新导出客户端(同时是 Drizzle Kit 的 schema 入口) |
server/database/drizzle/drizzle.config.ts | Drizzle Kit 配置(dialect、schema、迁移输出目录) |
server/database/drizzle/schema/auth.ts | user、session、account、verification 表 |
server/database/drizzle/schema/payment.ts | subscription、payment 表 + 枚举 |
server/database/drizzle/service/payment.ts | 小型数据访问辅助(createPayment) |
server/database/drizzle/types.ts | drizzle-zod 插入 schema(PaymentInsertScheme) |
客户端
// server/database/drizzle/client.ts
import { drizzle } from "drizzle-orm/node-postgres";
const runtimeConfig = useRuntimeConfig();
const db = drizzle(runtimeConfig.databaseUrl!);
export default db;在服务端任意位置以 import db from "~~/server/database/drizzle/client" 导入。
Better Auth 通过 server/utils/auth.ts 中的 Drizzle 适配器(provider: "pg")
消费认证 schema —— 参见 身份认证。
Schema
认证 schema 包含 Better Auth 的 user、session、account 与
verification 表(user 表含 role 以及 admin 插件的
banned/banReason/banExpires 字段)。
支付 schema 包含:
subscription—— 每用户一行(userId唯一),含provider、status、周期 日期与试用字段。payment—— 每订单一行,含amount、currency、status、provider以及 唯一的orderNo。
两者均使用 Postgres 枚举(provider、order_status、subscription_status、
plan_interval)。行如何写入见 支付。
迁移工作流
本模板采用 generate/migrate(而非 push)工作流。Drizzle Kit 读取
server/database/drizzle/drizzle.config.ts,其 schema 指向
server/database/index.ts,将迁移写入 server/database/migrations,并从 Nuxt
运行时配置读取 NUXT_DATABASE_URL。
| 命令 | 作用 |
|---|---|
npx drizzle-kit generate | 从 schema 生成 SQL 迁移 |
npx drizzle-kit migrate | 应用待处理的迁移 |
npx drizzle-kit studio | 在 Drizzle Studio 中浏览数据 |
模板出厂时不含已提交的 server/database/migrations 目录 —— 首次 generate 会
根据当前 schema 创建它。请提交生成的 SQL,使各环境部署应用相同的迁移。
新增表或字段
修改 schema
在 server/database/drizzle/schema/*.ts 中新增或修改表。确保它能从
server/database/index.ts 到达,因为该文件是 Drizzle Kit 的 schema 入口。
生成并应用
npx drizzle-kit generate
npx drizzle-kit migrate保持 Better Auth 同步
若改动了认证表,请保持与 Better Auth 所需列的兼容。优先通过插件/配置扩展,而非 重命名核心列。
生产注意事项
drizzle(databaseUrl)使用node-postgres连接池。在 serverless/edge 平台上, 将NUXT_DATABASE_URL指向你的服务商连接池字符串,以免耗尽连接数。- 在新代码接收流量之前,把迁移作为部署流水线的一部分,先对生产数据库执行。
NUXT_ORM_PROVIDER为预留项,但目前仅实现drizzle。
