如果在安装过程中遇到依赖解析问题
如果您没有使用 React Native,使用 --force
或 --legacy-peer-deps
强制安装应该可以解决问题。如果您正在使用 React Native,则需要使用与您的 React Native 版本兼容的精确 React 版本。
本教程演示了如何在 Edge runtime 中将 Drizzle ORM 与 Vercel Functions 结合使用。
npm i -g vercel
npx create-next-app@latest --typescript
npm i drizzle-orm
npm i -D drizzle-kit
如果在安装过程中遇到依赖解析问题
如果您没有使用 React Native,使用 --force
或 --legacy-peer-deps
强制安装应该可以解决问题。如果您正在使用 React Native,则需要使用与您的 React Native 版本兼容的精确 React 版本。
将 Drizzle ORM 与 Vercel Edge 函数结合使用时,您必须使用 Edge 兼容驱动程序,因为这些函数在 Edge runtime 而不是 Node.js runtime 中运行,因此标准 Node.js API 会有一些限制。
您可以根据您的数据库方言选择其中一个驱动程序
Neon Postgres
。Neon 无服务器驱动程序
之上。我们建议使用此驱动程序连接到 Vercel Postgres
。MySQL
客户端并通过 HTTP 连接执行查询,这通常不会被云提供商阻止。@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 config - 由 Drizzle Kit 使用的配置文件,包含有关你的数据库连接、迁移文件夹和 schema 文件的所有信息。
在项目的根目录中创建 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 kit push 命令 将更改直接推送到数据库
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 Reference 和 Vercel Functions Quickstart。
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
在浏览器中导航到您创建的路由(例如 /api/hello
)
{
"users": [],
"message": "success"
}
在控制台创建新项目或运行 vercel
命令部署您的项目
vercel
添加 POSTGRES_URL
环境变量
vercel env add POSTGRES_URL
重新部署您的项目以更新环境变量
vercel
最后,您可以使用已部署项目的 URL 并导航到您创建的路由(例如 /api/hello
)来访问您的 Edge 函数。
您可以在文档中查看 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 config - 由 Drizzle Kit 使用的配置文件,包含有关你的数据库连接、迁移文件夹和 schema 文件的所有信息。
在项目的根目录中创建 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 kit push 命令 将更改直接推送到数据库
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 Reference 和 Vercel Functions Quickstart。
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
在浏览器中导航到您创建的路由(例如 /api/hello
)
{
"users": [],
"message": "success"
}
在控制台创建新项目或运行 vercel
命令部署您的项目
vercel
添加 POSTGRES_URL
环境变量
vercel env add POSTGRES_URL
重新部署您的项目以更新环境变量
vercel
最后,您可以使用已部署项目的 URL 并导航到您创建的路由(例如 /api/hello
)来访问您的 Edge 函数。
在本教程中,我们使用 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 config - 由 Drizzle Kit 使用的配置文件,包含有关你的数据库连接、迁移文件夹和 schema 文件的所有信息。
在项目的根目录中创建 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 kit push 命令 将更改直接推送到数据库
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 Reference 和 Vercel Functions Quickstart。
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
在浏览器中导航到您创建的路由(例如 /api/hello
)
{
"users": [],
"message": "success"
}
在控制台创建新项目或运行 vercel
命令部署您的项目
vercel
添加 MYSQL_URL
环境变量
vercel env add MYSQL_URL
重新部署您的项目以更新环境变量
vercel
最后,您可以使用已部署项目的 URL 并导航到您创建的路由(例如 /api/hello
)来访问您的 Edge 函数。
您可以在文档中查看 Drizzle 与 Turso 的快速入门指南或教程。
@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 config - 由 Drizzle Kit 使用的配置文件,包含有关你的数据库连接、迁移文件夹和 schema 文件的所有信息。
在项目的根目录中创建 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 kit push 命令 将更改直接推送到数据库
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 Reference 和 Vercel Functions Quickstart。
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
在浏览器中导航到您创建的路由(例如 /api/hello
)
{
"users": [],
"message": "success"
}
在控制台创建新项目或运行 vercel
命令部署您的项目
vercel
添加 TURSO_CONNECTION_URL
环境变量
vercel env add TURSO_CONNECTION_URL
添加 TURSO_AUTH_TOKEN
环境变量
vercel env add TURSO_AUTH_TOKEN
重新部署您的项目以更新环境变量
vercel
最后,您可以使用已部署项目的 URL 并导航到您创建的路由(例如 /api/hello
)来访问您的 Edge 函数。