如果你在安装过程中遇到解决依赖的问题:
如果你没有使用 React Native,强制安装 --force
或 --legacy-peer-deps
应该可以解决此问题。如果你使用的是 React Native,则需要使用与你的 React Native 版本兼容的 React 版本。
本教程演示了如何在 Edge 运行时 中使用 Drizzle ORM 和 Vercel 函数。
npm i -g vercel
npx create-next-app@latest --typescript
npm 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)
来访问你的边缘函数。