跳至主要内容

部署到 Vercel Edge Functions 和 Middleware

此页面涵盖了您需要了解的所有内容,以便部署一个使用 Prisma Client 与数据库交互的应用程序,该应用程序在 Vercel Edge MiddlewareVercel Function 中部署到 Vercel Edge Runtime

要将 Vercel Function 部署到 Vercel Edge Runtime,您可以在 Vercel Function 的请求处理程序外部设置 export const runtime = 'edge'

部署到 Vercel Edge Functions 和 Edge Middleware 的一般注意事项

使用边缘兼容的驱动程序

Vercel 的 Edge Runtime 目前仅支持有限的数据库驱动程序集

请注意,node-postgrespg)目前**不支持** Vercel Edge Functions。

在部署使用 Prisma ORM 的 Vercel Edge Function 时,您需要使用这些 边缘兼容的驱动程序 之一及其相应的 驱动程序适配器 用于 Prisma ORM。

注意Prisma Accelerate 使您可以从任何边缘函数提供程序访问任何数据库。不需要边缘兼容的驱动程序。

将您的数据库连接 URL 作为环境变量设置

首先,确保 DATABASE_URL 在您的 Prisma 模式中设置为 datasourceurl

datasource db {
provider = "postgresql" // this might also be `mysql` or another value depending on your database
url = env("DATABASE_URL")
}

开发

在**开发**环境中,您可以通过 DATABASE_URL 环境变量配置您的数据库连接(例如,使用 .env 文件)。

生产

将您的 Edge Function 部署到**生产**环境时,您需要使用 vercel CLI 设置数据库连接

npx vercel env add DATABASE_URL

此命令是交互式的,它将要求您选择环境并在后续步骤中提供 DATABASE_URL 的值。

或者,您可以通过 Vercel 仪表板中项目的 UI 配置环境变量。

postinstall 钩子中生成 Prisma Client

在您的 package.json 中,您应该添加如下所示的 "postinstall" 部分

package.json
{
// ...,
"postinstall": "prisma generate"
}

免费账户的尺寸限制

Vercel 对免费账户有 1 MB 的大小限制。如果您的包含 Prisma ORM 的应用程序包超过该大小,我们建议您升级到付费账户或使用 Prisma Accelerate 部署您的应用程序。

数据库特定的注意事项和示例

本节提供了使用 Prisma ORM 部署 Vercel Edge Functions 的数据库特定说明。

先决条件

作为以下部分的先决条件,您需要在本地运行一个 Vercel Edge Function(通常以 Next.js API 路由的形式出现),并安装 Prisma 和 Vercel CLI。

如果您还没有,您可以运行以下命令从头开始设置一个 Next.js 应用程序(按照 Vercel Functions 快速入门 中的说明)

npm install -g vercel
npx create-next-app@latest
npm install prisma --save-dev
npx prisma init

我们将使用默认的 User 模型作为以下示例。

model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}

Vercel Postgres

如果您使用的是 Vercel Postgres,则需要

  • 使用 @prisma/adapter-neon 数据库适配器(通过 driverAdapters 预览功能),因为 Vercel Postgres 在后台使用 Neon
  • 请注意,Vercel 默认情况下将数据库连接字符串的环境变量称为 POSTGRES_PRISMA_URL,而 Prisma 文档中使用的默认名称通常为 DATABASE_URL;使用 Vercel 的命名,您需要在 datasource 块上设置以下字段
    datasource db {
    provider = "postgresql"
    url = env("POSTGRES_PRISMA_URL") // uses connection pooling
    directUrl = env("POSTGRES_URL_NON_POOLING") // uses a direct connection
    }

1. 配置 Prisma 模式和数据库连接

注意:如果您没有要部署的项目,请按照 先决条件 中的说明引导一个包含 Prisma ORM 的基本 Next.js 应用程序。

首先,确保数据库连接已正确配置。在你的 Prisma 模式中,将 datasource 块的 url 设置为 POSTGRES_PRISMA_URL 环境变量,并将 directUrl 设置为 POSTGRES_URL_NON_POOLING 环境变量。你还需要启用 driverAdapters 功能标志。

schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}

datasource db {
provider = "postgresql"
url = env("POSTGRES_PRISMA_URL") // uses connection pooling
directUrl = env("POSTGRES_URL_NON_POOLING") // uses a direct connection
}

接下来,你需要将 POSTGRES_PRISMA_URLPOSTGRES_URL_NON_POOLING 环境变量设置为你的数据库连接的值。

如果你运行了 npx prisma init,你可以使用此命令创建的 .env 文件来设置这些变量。

.env
POSTGRES_PRISMA_URL="postgres://user:[email protected]:5432/name?pgbouncer=true&connect_timeout=15"
POSTGRES_URL_NON_POOLING="postgres://user:[email protected]:5432/name"

2. 安装依赖项

接下来,安装所需的软件包。

npm install @prisma/adapter-neon
npm install @neondatabase/serverless

3. 配置 postinstall 钩子

接下来,在你的 package.json 文件的 scripts 部分添加一个新的键。

package.json
{
// ...
"scripts": {
// ...
"postinstall": "prisma generate"
}
}

4. 迁移你的数据库模式(如果适用)

如果你在上面运行了 npx prisma init,你需要迁移你的数据库模式以创建在你的 Prisma 模式中定义的 User 表(如果你已经在数据库中拥有所有需要的表,则可以跳过此步骤)。

npx prisma migrate dev --name init

5. 在你的 Vercel Edge 函数中使用 Prisma Client 向数据库发送查询

如果你从头开始创建项目,你可以创建一个新的边缘函数,如下所示。

首先,创建一个新的 API 路由,例如,使用以下命令。

mkdir src/app/api
mkdir src/app/api/edge
touch src/app/api/edge/route.ts

以下是一个示例代码片段,你可以使用它来实例化 PrismaClient 并向你新创建的 app/api/edge/route.ts 文件中的数据库发送查询。

app/api/edge/route.ts
import { NextResponse } from 'next/server'
import { PrismaClient } from '@prisma/client'
import { PrismaNeon } from '@prisma/adapter-neon'
import { Pool } from '@neondatabase/serverless'

export const runtime = 'edge'

export async function GET(request: Request) {
const neon = new Pool({ connectionString: process.env.POSTGRES_PRISMA_URL })
const adapter = new PrismaNeon(neon)
const prisma = new PrismaClient({ adapter })

const users = await prisma.user.findMany()

return NextResponse.json(users, { status: 200 })
}

6. 在本地运行 Edge 函数

使用以下命令运行应用程序。

npm run dev

你现在可以通过以下 URL 访问 Edge 函数: https://127.0.0.1:3000/api/edge

7. 设置 POSTGRES_PRISMA_URL 环境变量并部署 Edge 函数

运行以下命令使用 Vercel 部署你的项目。

npx vercel deploy

请注意,一旦项目在 Vercel 上创建,你需要设置 POSTGRES_PRISMA_URL 环境变量(如果这是你的第一次部署,它很可能失败了)。你可以通过 Vercel UI 或运行以下命令来执行此操作。

npx vercel env add POSTGRES_PRISMA_URL

此时,你可以从 Vercel 仪表盘获取已部署应用程序的 URL,并通过 /api/edge 路由访问边缘函数。

PlanetScale

如果你正在使用 PlanetScale 数据库,你需要

  • 使用 @prisma/adapter-planetscale 数据库适配器(通过 driverAdapters 预览功能)。

1. 配置 Prisma 模式和数据库连接

注意:如果您没有要部署的项目,请按照 先决条件 中的说明引导一个包含 Prisma ORM 的基本 Next.js 应用程序。

首先,确保数据库连接已正确配置。在你的 Prisma 模式中,将 datasource 块的 url 设置为 DATABASE_URL 环境变量。你还需要启用 driverAdapters 功能标志。

schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}

datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma" // required for PlanetScale (as by default foreign keys are disabled)
}

接下来,你需要在你的 .env 文件中设置 DATABASE_URL 环境变量,该文件由 Prisma 和 Next.js 都用来读取你的环境变量。

.env
DATABASE_URL="mysql://32qxa2r7hfl3102wrccj:[email protected]/demo-cf-worker-ps?sslaccept=strict"

2. 安装依赖项

接下来,安装所需的软件包。

npm install @prisma/adapter-planetscale
npm install @planetscale/database

3. 配置 postinstall 钩子

接下来,在你的 package.json 文件的 scripts 部分添加一个新的键。

package.json
{
// ...
"scripts": {
// ...
"postinstall": "prisma generate"
}
}

4. 迁移你的数据库模式(如果适用)

如果你在上面运行了 npx prisma init,你需要迁移你的数据库模式以创建在你的 Prisma 模式中定义的 User 表(如果你已经在数据库中拥有所有需要的表,则可以跳过此步骤)。

npx prisma db push

5. 在 Edge 函数中使用 Prisma Client 向数据库发送查询

如果你从头开始创建项目,你可以创建一个新的边缘函数,如下所示。

首先,创建一个新的 API 路由,例如,使用以下命令。

mkdir src/app/api
mkdir src/app/api/edge
touch src/app/api/edge/route.ts

以下是一个示例代码片段,你可以使用它来实例化 PrismaClient 并向你新创建的 app/api/edge/route.ts 文件中的数据库发送查询。

app/api/edge/route.ts
import { NextResponse } from 'next/server'
import { PrismaClient } from '@prisma/client'
import { PrismaPlanetScale } from '@prisma/adapter-planetscale'
import { Client } from '@planetscale/database'

export const runtime = 'edge'

export async function GET(request: Request) {
const client = new Client({ url: process.env.DATABASE_URL })
const adapter = new PrismaPlanetScale(client)
const prisma = new PrismaClient({ adapter })

const users = await prisma.user.findMany()

return NextResponse.json(users, { status: 200 })
}

6. 在本地运行 Edge 函数

使用以下命令运行应用程序。

npm run dev

你现在可以通过以下 URL 访问 Edge 函数: https://127.0.0.1:3000/api/edge

7. 设置 DATABASE_URL 环境变量并部署 Edge 函数

运行以下命令使用 Vercel 部署你的项目。

npx vercel deploy

请注意,一旦项目在 Vercel 上创建,你需要设置 DATABASE_URL 环境变量(如果这是你的第一次部署,它很可能失败了)。你可以通过 Vercel UI 或运行以下命令来执行此操作。

npx vercel env add DATABASE_URL

此时,你可以从 Vercel 仪表盘获取已部署应用程序的 URL,并通过 /api/edge 路由访问边缘函数。

Neon

如果你正在使用 Neon 数据库,你需要

  • 使用 @prisma/adapter-neon 数据库适配器(通过 driverAdapters 预览功能)。

1. 配置 Prisma 模式和数据库连接

注意:如果您没有要部署的项目,请按照 先决条件 中的说明引导一个包含 Prisma ORM 的基本 Next.js 应用程序。

首先,确保数据库连接已正确配置。在你的 Prisma 模式中,将 datasource 块的 url 设置为 DATABASE_URL 环境变量。你还需要启用 driverAdapters 功能标志。

schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

接下来,你需要在你的 .env 文件中设置 DATABASE_URL 环境变量,该文件由 Prisma 和 Next.js 都用来读取你的环境变量。

.env
DATABASE_URL="postgresql://janedoe:[email protected]/neondb?sslmode=require"

2. 安装依赖项

接下来,安装所需的软件包。

npm install @prisma/adapter-neon
npm install @neondatabase/serverless

3. 配置 postinstall 钩子

接下来,在你的 package.json 文件的 scripts 部分添加一个新的键。

package.json
{
// ...
"scripts": {
// ...
"postinstall": "prisma generate"
}
}

4. 迁移你的数据库模式(如果适用)

如果你在上面运行了 npx prisma init,你需要迁移你的数据库模式以创建在你的 Prisma 模式中定义的 User 表(如果你已经在数据库中拥有所有需要的表,则可以跳过此步骤)。

npx prisma migrate dev --name init

5. 在 Edge 函数中使用 Prisma Client 向数据库发送查询

如果你从头开始创建项目,你可以创建一个新的边缘函数,如下所示。

首先,创建一个新的 API 路由,例如,使用以下命令。

mkdir src/app/api
mkdir src/app/api/edge
touch src/app/api/edge/route.ts

以下是一个示例代码片段,你可以使用它来实例化 PrismaClient 并向你新创建的 app/api/edge/route.ts 文件中的数据库发送查询。

app/api/edge/route.ts
import { NextResponse } from 'next/server'
import { PrismaClient } from '@prisma/client'
import { PrismaNeon } from '@prisma/adapter-neon'
import { Pool } from '@neondatabase/serverless'

export const runtime = 'edge'

export async function GET(request: Request) {
const neon = new Pool({ connectionString: process.env.DATABASE_URL })
const adapter = new PrismaNeon(neon)
const prisma = new PrismaClient({ adapter })

const users = await prisma.user.findMany()

return NextResponse.json(users, { status: 200 })
}

6. 在本地运行 Edge 函数

使用以下命令运行应用程序。

npm run dev

你现在可以通过以下 URL 访问 Edge 函数: https://127.0.0.1:3000/api/edge

7. 设置 DATABASE_URL 环境变量并部署 Edge 函数

运行以下命令使用 Vercel 部署你的项目。

npx vercel deploy

请注意,一旦项目在 Vercel 上创建,你需要设置 DATABASE_URL 环境变量(如果这是你的第一次部署,它很可能失败了)。你可以通过 Vercel UI 或运行以下命令来执行此操作。

npx vercel env add DATABASE_URL

此时,你可以从 Vercel 仪表盘获取已部署应用程序的 URL,并通过 /api/edge 路由访问边缘函数。