如果你在安装过程中遇到解决依赖的问题:
如果你没有使用 React Native,强制安装 --force 或 --legacy-peer-deps 应该可以解决此问题。如果你使用的是 React Native,则需要使用与你的 React Native 版本兼容的 React 版本。
本教程演示了如何在 Edge 运行时 中使用 Drizzle ORM 和 Vercel 函数。
npm i -g vercel
npx create-next-app@latest --typescriptnpm i drizzle-orm -D drizzle-kit
如果你在安装过程中遇到解决依赖的问题:
如果你没有使用 React Native,强制安装 --force 或 --legacy-peer-deps 应该可以解决此问题。如果你使用的是 React Native,则需要使用与你的 React Native 版本兼容的 React 版本。
将 Drizzle ORM 与 Vercel Edge 函数一起使用时,你必须使用 Edge 兼容的驱动程序,因为这些函数在“Edge 运行时”中运行,而不是在 Node.js 运行时,因此标准 Node.js API 存在一些限制。
你可以根据你的数据库方言选择以下驱动程序之一:
Neon 无服务器驱动程序 允许你通过 HTTP 或 WebSockets(而非 TCP)从无服务器和边缘环境查询 Neon Postgres 数据库。我们建议使用此驱动程序连接到 Neon Postgres。
Vercel Postgres 驱动程序 构建于 Neon serverless driver 之上。我们建议使用此驱动程序连接到 Vercel Postgres。
PlanetScale 无服务器驱动程序 允许你访问任何 MySQL 客户端并通过 HTTP 连接执行查询,云提供商通常不会阻止该连接。
libSQL 客户端 允许你访问 Turso 数据库。
直接导航到 Neon Postgres 部分。
直接导航到 Vercel Postgres 部分。
直接导航到 PlanetScale 部分。
直接导航到 Turso 部分。
@neondatabase/serverless 驱动程序安装 @neondatabase/serverless 驱动程序:
npm i @neondatabase/serverless
在 src/db 目录中创建一个 schema.ts 文件并声明表模式:
import { pgTable, serial, text } from "drizzle-orm/pg-core";
export const usersTable = pgTable('users_table', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
age: text('age').notNull(),
email: text('email').notNull().unique(),
})Drizzle 配置 - Drizzle 套件 使用的配置文件,包含有关数据库连接、迁移文件夹和模式文件的所有信息。
在项目根目录中创建一个 drizzle.config.ts 文件并添加以下内容:
import { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./src/db/schema.ts",
dialect: "postgresql",
dbCredentials: {
url: process.env.POSTGRES_URL!,
},
});在 .env 文件中配置数据库连接字符串:
POSTGRES_URL="postgres://[user]:[password]@[host]-[region].aws.neon.tech:5432/[db-name]?sslmode=[ssl-mode]"你可以使用 drizzle-kit generate 命令生成迁移,然后使用 drizzle-kit migrate 命令运行它们。
生成迁移:
npx drizzle-kit generate这些迁移存储在 drizzle 目录中,具体位置请参见你的 drizzle.config.ts 文件。此目录将包含更新数据库架构所需的 SQL 文件,以及一个 meta 文件夹,用于存储不同迁移阶段的架构快照。
生成的迁移示例:
CREATE TABLE IF NOT EXISTS "users_table" (
"id" serial PRIMARY KEY NOT NULL,
"name" text NOT NULL,
"age" text NOT NULL,
"email" text NOT NULL,
CONSTRAINT "users_table_email_unique" UNIQUE("email")
);运行迁移:
npx drizzle-kit migrate或者,你可以使用 Drizzle 套件推送命令 将更改直接推送到数据库:
npx drizzle-kit push在 src/db 目录中创建一个 index.ts 文件并设置数据库配置:
import { drizzle } from 'drizzle-orm/neon-serverless';
export const db = drizzle(process.env.POSTGRES_URL!)在 src/app/api/hello 目录中创建 route.ts 文件。要了解有关如何编写函数的更多信息,请参阅 Functions API 参考 和 Vercel 函数快速入门。
import { db } from "@/db";
import { usersTable } from "@/db/schema";
import { NextResponse } from "next/server";
export const dynamic = 'force-dynamic'; // static by default, unless reading the request
export const runtime = 'edge' // specify the runtime to be edge
export async function GET(request: Request) {
const users = await db.select().from(usersTable)
return NextResponse.json({ users, message: 'success' });
}运行 next dev 命令启动本地开发服务器:
npx next dev在浏览器中导航到你创建的路由 (e.g. /api/hello):
{
"users": [],
"message": "success"
}在 dashboard 中创建一个新项目或运行 vercel 命令部署项目:
vercel添加 POSTGRES_URL 环境变量:
vercel env add POSTGRES_URL重新部署项目以更新环境变量:
vercel最后,你可以使用已部署项目的 URL 并导航到你创建的路由 (e.g. /api/hello) 来访问你的边缘函数。
你可以在 documentation 中查看 Drizzle 与 Vercel Postgres 客户端的快速入门指南。
@vercel/postgres 驱动程序安装 @vercel/postgres 驱动程序:
npm i @vercel/postgres
在 src/db 目录中创建一个 schema.ts 文件并声明表模式:
import { pgTable, serial, text } from "drizzle-orm/pg-core";
export const usersTable = pgTable('users_table', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
age: text('age').notNull(),
email: text('email').notNull().unique(),
})Drizzle 配置 - Drizzle 套件 使用的配置文件,包含有关数据库连接、迁移文件夹和模式文件的所有信息。
在项目根目录中创建一个 drizzle.config.ts 文件并添加以下内容:
import { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./src/db/schema.ts",
dialect: "postgresql",
dbCredentials: {
url: process.env.POSTGRES_URL!,
},
});在 .env 文件中配置数据库连接字符串:
POSTGRES_URL="postgres://[user]:[password]@[host]-[region].aws.neon.tech:5432/[db-name]?sslmode=[ssl-mode]"你可以使用 drizzle-kit generate 命令生成迁移,然后使用 drizzle-kit migrate 命令运行它们。
生成迁移:
npx drizzle-kit generate这些迁移存储在 drizzle 目录中,具体位置请参见你的 drizzle.config.ts 文件。此目录将包含更新数据库架构所需的 SQL 文件,以及一个 meta 文件夹,用于存储不同迁移阶段的架构快照。
生成的迁移示例:
CREATE TABLE IF NOT EXISTS "users_table" (
"id" serial PRIMARY KEY NOT NULL,
"name" text NOT NULL,
"age" text NOT NULL,
"email" text NOT NULL,
CONSTRAINT "users_table_email_unique" UNIQUE("email")
);运行迁移:
npx drizzle-kit migrate或者,你可以使用 Drizzle 套件推送命令 将更改直接推送到数据库:
npx drizzle-kit push在 src/db 目录中创建一个 index.ts 文件并设置数据库配置:
import { drizzle } from 'drizzle-orm/vercel-postgres';
export const db = drizzle()在 src/app/api/hello 目录中创建 route.ts 文件。要了解有关如何编写函数的更多信息,请参阅 Functions API 参考 和 Vercel 函数快速入门。
import { db } from "@/db";
import { usersTable } from "@/db/schema";
import { NextResponse } from "next/server";
export const dynamic = 'force-dynamic'; // static by default, unless reading the request
export const runtime = 'edge' // specify the runtime to be edge
export async function GET(request: Request) {
const users = await db.select().from(usersTable)
return NextResponse.json({ users, message: 'success' });
}运行 next dev 命令启动本地开发服务器:
npx next dev在浏览器中导航到你创建的路由 (e.g. /api/hello):
{
"users": [],
"message": "success"
}在 dashboard 中创建一个新项目或运行 vercel 命令部署项目:
vercel添加 POSTGRES_URL 环境变量:
vercel env add POSTGRES_URL重新部署项目以更新环境变量:
vercel最后,你可以使用已部署项目的 URL 并导航到你创建的路由 (e.g. /api/hello) 来访问你的边缘函数。
在本教程中,我们使用 PlanetScale MySQL。
@planetscale/database 驱动程序安装 @planetscale/database 驱动程序:
npm i @planetscale/database
在 src/db 目录中创建一个 schema.ts 文件并声明表模式:
import { mysqlTable, serial, text } from "drizzle-orm/mysql-core";
export const usersTable = mysqlTable('users_table', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
age: text('age').notNull(),
email: text('email').notNull().unique(),
})Drizzle 配置 - Drizzle 套件 使用的配置文件,包含有关数据库连接、迁移文件夹和模式文件的所有信息。
在项目根目录中创建一个 drizzle.config.ts 文件并添加以下内容:
import { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./src/db/schema.ts",
dialect: "mysql",
dbCredentials: {
url: process.env.MYSQL_URL!,
},
});在 .env 文件中配置数据库连接字符串:
MYSQL_URL="mysql://[user]:[password]@[host].[region].psdb.cloud/[db-name]?ssl={'rejectUnauthorized':[ssl-rejectUnauthorized]}"你可以使用 drizzle-kit generate 命令生成迁移,然后使用 drizzle-kit migrate 命令运行它们。
生成迁移:
npx drizzle-kit generate这些迁移存储在 drizzle 目录中,具体位置请参见你的 drizzle.config.ts 文件。此目录将包含更新数据库架构所需的 SQL 文件,以及一个 meta 文件夹,用于存储不同迁移阶段的架构快照。
生成的迁移示例:
CREATE TABLE `users_table` (
`id` serial AUTO_INCREMENT NOT NULL,
`name` text NOT NULL,
`age` text NOT NULL,
`email` text NOT NULL,
CONSTRAINT `users_table_id` PRIMARY KEY(`id`),
CONSTRAINT `users_table_email_unique` UNIQUE(`email`)
);运行迁移:
npx drizzle-kit migrate或者,你可以使用 Drizzle 套件推送命令 将更改直接推送到数据库:
npx drizzle-kit push在 src/db 目录中创建一个 index.ts 文件并设置数据库配置:
import { drizzle } from "drizzle-orm/planetscale-serverless";
export const db = drizzle(process.env.MYSQL_URL!)在 src/app/api/hello 目录中创建 route.ts 文件。要了解有关如何编写函数的更多信息,请参阅 Functions API 参考 和 Vercel 函数快速入门。
import { db } from "@/app/db/db";
import { usersTable } from "@/app/db/schema";
import { NextResponse } from "next/server";
export const dynamic = 'force-dynamic'; // static by default, unless reading the request
export const runtime = 'edge' // specify the runtime to be edge
export async function GET(request: Request) {
const users = await db.select().from(usersTable)
return NextResponse.json({ users, message: 'success' });
}运行 next dev 命令启动本地开发服务器:
npx next dev在浏览器中导航到你创建的路由 (e.g. /api/hello):
{
"users": [],
"message": "success"
}在 dashboard 中创建一个新项目或运行 vercel 命令部署项目:
vercel添加 MYSQL_URL 环境变量:
vercel env add MYSQL_URL重新部署项目以更新环境变量:
vercel最后,你可以使用已部署项目的 URL 并导航到你创建的路由 (e.g. /api/hello) 来访问你的边缘函数。
你可以在文档中查看 Drizzle with Turso 的 快速入门指南 或 tutorial。
@libsql/client 驱动程序安装 @libsql/client 驱动程序:
npm i @libsql/client
在 src/db 目录中创建一个 schema.ts 文件并声明表模式:
import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
export const usersTable = sqliteTable('users_table', {
id: integer('id').primaryKey(),
name: text('name').notNull(),
age: text('age').notNull(),
email: text('email').notNull().unique(),
})Drizzle 配置 - Drizzle 套件 使用的配置文件,包含有关数据库连接、迁移文件夹和模式文件的所有信息。
在项目根目录中创建一个 drizzle.config.ts 文件并添加以下内容:
import { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./src/db/schema.ts",
dialect: "turso",
dbCredentials: {
url: process.env.TURSO_CONNECTION_URL!,
authToken: process.env.TURSO_AUTH_TOKEN!,
},
});在 .env 文件中配置数据库连接字符串和身份验证令牌:
TURSO_CONNECTION_URL="libsql://[db-name].turso.io"
TURSO_AUTH_TOKEN="[auth-token]"你可以使用 drizzle-kit generate 命令生成迁移,然后使用 drizzle-kit migrate 命令运行它们。
生成迁移:
npx drizzle-kit generate这些迁移存储在 drizzle 目录中,具体位置请参见你的 drizzle.config.ts 文件。此目录将包含更新数据库架构所需的 SQL 文件,以及一个 meta 文件夹,用于存储不同迁移阶段的架构快照。
生成的迁移示例:
CREATE TABLE `users_table` (
`id` integer PRIMARY KEY NOT NULL,
`name` text NOT NULL,
`age` text NOT NULL,
`email` text NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `users_table_email_unique` ON `users_table` (`email`);运行迁移:
npx drizzle-kit migrate或者,你可以使用 Drizzle 套件推送命令 将更改直接推送到数据库:
npx drizzle-kit push在 src/db 目录中创建一个 index.ts 文件并设置数据库配置:
import { drizzle } from 'drizzle-orm/libsql';
export const db = drizzle({ connection: {
url: process.env.TURSO_CONNECTION_URL!,
authToken: process.env.TURSO_AUTH_TOKEN!,
}})在 src/app/api/hello 目录中创建 route.ts 文件。要了解有关如何编写函数的更多信息,请参阅 Functions API 参考 和 Vercel 函数快速入门。
import { db } from "@/app/db/db";
import { usersTable } from "@/app/db/schema";
import { NextResponse } from "next/server";
export const dynamic = 'force-dynamic'; // static by default, unless reading the request
export const runtime = 'edge' // specify the runtime to be edge
export async function GET(request: Request) {
const users = await db.select().from(usersTable)
return NextResponse.json({ users, message: 'success' });
}运行 next dev 命令启动本地开发服务器:
npx next dev在浏览器中导航到你创建的路由 (e.g. /api/hello):
{
"users": [],
"message": "success"
}在 dashboard 中创建一个新项目或运行 vercel 命令部署项目:
vercel添加 TURSO_CONNECTION_URL 环境变量:
vercel env add TURSO_CONNECTION_URL添加 TURSO_AUTH_TOKEN 环境变量:
vercel env add TURSO_AUTH_TOKEN重新部署项目以更新环境变量:
vercel最后,你可以使用已部署项目的 URL 并导航到你创建的路由 (e.g. /api/hello) 来访问你的边缘函数。