如果你觉得drizzle有些简单,那你也可以尝试一下Prisma:
1. 安装 Prisma 及相关依赖:
Prisma 需要安装
@prisma/client
和 prisma
,如果数据库是 PostgreSQL、MySQL 或 SQLite,还需安装相应的驱动:# 安装 Prisma CLI npm install prisma --save-dev # 安装 Prisma Client npm install @prisma/client # 如果使用 PostgreSQL npm install pg
2. 初始化 Prisma:
执行以下命令,生成
prisma/schema.prisma
文件:npx prisma init
它会创建
.env
和 prisma/schema.prisma
文件,.env
中的 DATABASE_URL
用于存放数据库连接信息,例如:
DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"
3. 配置 prisma/schema.prisma
:
在
prisma/schema.prisma
文件中定义数据库模型。例如,创建一个 User
表:generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" // 可选:mysql / sqlite / sqlserver url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) name String email String @unique posts Post[] } model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id]) }
4. 生成 Prisma Client:
每次修改
schema.prisma
后,需要执行以下命令以生成 Prisma Client:npx prisma generate
如果是首次运行数据库迁移:
npx prisma migrate dev --name init
5. 在 Next.js API 路由中使用 Prisma
在
lib/prisma.ts
文件中创建 Prisma 客户端实例:// lib/prisma.ts import { PrismaClient } from '@prisma/client'; const globalForPrisma = global as unknown as { prisma?: PrismaClient }; export const prisma = globalForPrisma.prisma || new PrismaClient(); if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
这样可以避免在开发环境下
Hot Reload
造成 Prisma 实例重复创建。6. 在 API 路由中使用 Prisma:
创建
pages/api/users.ts
处理用户相关 API:import { prisma } from '@/lib/prisma'; import type { NextApiRequest, NextApiResponse } from 'next'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === 'GET') { const users = await prisma.user.findMany(); return res.status(200).json(users); } if (req.method === 'POST') { const { name, email } = req.body; try { const newUser = await prisma.user.create({ data: { name, email }, }); return res.status(201).json(newUser); } catch (error) { return res.status(400).json({ error: 'User creation failed' }); } } res.setHeader('Allow', ['GET', 'POST']); res.status(405).end(`Method ${req.method} Not Allowed`); }
7. 部署时的注意事项:
在 Vercel 或 Railway 部署时,需要:
- 正确配置
.env
,在 Vercel 中设置DATABASE_URL
- 在构建时运行
prisma generate
和migrate deploy
npx prisma generate npx prisma migrate deploy