next.js使用prisma连接supabase

0 阅读2分钟
  1. 先打开supabase官网注册账号并创建一个项目,
  2. 安装prisma及相关依赖
npm install prisma --save-dev
npm install prisma tsx @types/pg --save-dev  
npm install @prisma/client @prisma/adapter-pg dotenv pg
  1. 初始化prisma,可能会因为网络问题导致失败,重试几次,(运行时需要验证supabase账号)
npx prisma init --db --output ../app/generated/prisma
  • 一个包含 schema.prisma 文件的 prisma 目录。
  • 一个用于配置 Prisma 的 prisma.config.ts 文件
  • 一个 Prisma Postgres 数据库。
  • 项目根目录中包含 DATABASE_URL 的 .env 文件。
  • 生成的 Prisma Client 的 output 目录为 app/generated/prisma
  1. 在prisma/schema.prisma中添加
model User {  
id Int @id @default(autoincrement())  
email String @unique  
name String?  
posts Post[]  
}  
  
model Post {  
id Int @id @default(autoincrement())  
title String  
content String?  
published Boolean @default(false)  
authorId Int  
author User @relation(fields: [authorId], references: [id])  
}
  1. 将 dotenv 添加到 prisma.config.ts

import 'dotenv/config'
  1. 创建数据库表
npx prisma migrate dev --name init
  1. 然后生成 Prisma Client
npx prisma generate
  1. 填充数据库

添加一些填充数据以使用示例用户和帖子填充数据库。

在 prisma/ 目录中创建一个名为 seed.ts 的新文件

`import { PrismaClient, Prisma } from "../app/generated/prisma/client";  
import { PrismaPg } from '@prisma/adapter-pg'  
import 'dotenv/config'  
  
const adapter = new PrismaPg({  
connectionString: process.env.DATABASE_URL,  
})  
  
const prisma = new PrismaClient({  
adapter,  
});  
  
const userData: Prisma.UserCreateInput[] = [  
{  
name: "Alice",  
email: "alice@prisma.io",  
posts: {  
create: [  
{  
title: "Join the Prisma `Discord`",  
content: "https://pris.ly/discord",  
published: true,  
},  
{  
title: "Prisma on YouTube",  
content: "https://pris.ly/youtube",  
},  
],  
},  
},  
{  
name: "Bob",  
email: "bob@prisma.io",  
posts: {  
create: [  
{  
title: "Follow Prisma on Twitter",  
content: "https://www.twitter.com/prisma",  
published: true,  
},  
],  
},  
},  
];  
  
export async function main() {  
for (const u of userData) {  
await prisma.user.create({ data: u });  
}  
}  
  
main();`

现在,通过更新 prisma.config.ts 来告诉 Prisma 如何运行此脚本

import 'dotenv/config'  
import { defineConfig, env } from 'prisma/config';  
  
export default defineConfig({  
schema: 'prisma/schema.prisma',  
migrations: {  
path: 'prisma/migrations',  
seed: `tsx prisma/seed.ts`,  
},  
datasource: {  
url: env('DATABASE_URL'),  
},  
});

最后,运行 prisma db seed,用我们在 seed.ts 文件中定义的初始数据填充你的数据库。

npx prisma db seed

并打开 Prisma Studio 检查您的数据

npx prisma studio
  1. 设置 Prisma Client

现在你已经有了一个包含一些初始数据的数据库,你可以设置 Prisma Client 并将其连接到你的数据库。

在你的项目根目录下,创建一个新的 lib 目录,并在其中添加一个 prisma.ts 文件。

import { PrismaClient } from '../app/generated/prisma/client'  
import { PrismaPg } from '@prisma/adapter-pg'  
  
const globalForPrisma = global as unknown as {  
prisma: PrismaClient  
}  
  
const adapter = new PrismaPg({  
connectionString: process.env.DATABASE_URL,  
})  
  
const prisma = globalForPrisma.prisma || new PrismaClient({  
adapter,  
})  
  
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma  
  
export default prisma

此文件创建一个 Prisma Client 并将其附加到全局对象,以便你的应用程序中只创建一个客户端实例。这有助于解决在使用 Prisma ORM 和 Next.js 的开发模式下可能出现的热重载问题。

  1. 使用 Prisma ORM 查询你的数据库

这为你提供了一个带有标题和用户列表的基本页面。然而,该列表是静态的,包含硬编码值。让我们更新页面以从你的数据库中获取用户并使其动态化。

import prisma from '@/lib/prisma'  
  
export default async function Home() {  
const users = await prisma.user.findMany();  
return (  
<div className="min-h-screen bg-gray-50 flex flex-col items-center justify-center -mt-16">  
<h1 className="text-4xl font-bold mb-8 font-[family-name:var(--font-geist-sans)] text-[#333333]">  
Superblog  
</h1>  
<ol className="list-decimal list-inside font-[family-name:var(--font-geist-sans)]">  
{users.map((user) => (  
<li key={user.id} className="mb-2">  
{user.name}  
</li>  
))}  
</ol>  
</div>  
);  
}
  1. 更多示例参考文档

prisma.org.cn/docs/guides…