如果您在安装过程中遇到依赖关系解析问题:
如果您不是在使用 React Native,可以通过强制安装 --force
或 --legacy-peer-deps
来解决此问题。如果您使用的是 React Native,则需要使用与您的 React Native 版本兼容的 React 的精确版本。
本教程演示如何在Edge 运行时中使用 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 的精确版本。
在使用 Vercel Edge 函数与 Drizzle ORM 时,您必须使用兼容 Edge 的驱动程序,因为函数在 Edge 运行时 中运行,而不是在 Node.js 运行时,这样标准 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 配置 - 由 Drizzle Kit 使用的配置文件,包含有关您的数据库连接、迁移文件夹和架构文件的所有信息。
在项目根目录创建 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 文件和用于存储不同迁移阶段/schema 快照的 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'; // 默认为静态,除非读取请求
export const runtime = '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)
以访问您的边缘函数。
您可以在 文档 中查看 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 Kit 使用的配置文件,包含有关您的数据库连接、迁移文件夹和架构文件的所有信息。
在项目根目录创建 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 文件和用于存储不同迁移阶段/schema 快照的 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'; // 默认为静态,除非读取请求
export const runtime = '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)
以访问您的边缘函数。
在本教程中我们使用 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 Kit 使用的配置文件,包含有关您的数据库连接、迁移文件夹和架构文件的所有信息。
在项目根目录创建 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 文件和用于存储不同迁移阶段/schema 快照的 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'; // 默认为静态,除非读取请求
export const runtime = '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)
以访问您的边缘函数。
您可以在文档中查看 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 配置 - 由 Drizzle Kit 使用的配置文件,包含有关您的数据库连接、迁移文件夹和架构文件的所有信息。
在项目根目录创建 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 文件和用于存储不同迁移阶段/schema 快照的 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'; // 默认为静态,除非读取请求
export const runtime = '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)
以访问您的边缘函数。