全栈
全栈框架(例如 Next.js、Remix 或 SvelteKit)模糊了服务器和客户端之间的界限。这些框架还提供了在服务器上获取和修改数据的不同模式。
您可以使用 Prisma 客户端从应用程序的服务器端部分查询您的数据库,使用您选择的框架。
支持的框架
以下列出了一些您可以与 Prisma ORM 一起使用的框架和库(并非全部)
全栈应用程序示例(例如 Next.js)
提示
如果您想学习如何使用 Next.js 和 Prisma ORM 构建应用程序,请查看此全面的视频教程.
假设您有一个类似于此的 Prisma 模式
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
generator client {
provider = "prisma-client-js"
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
您现在可以使用Prisma 客户端 API 在getServerSideProps
、getStaticProps
、API 路由中实现查询数据库的逻辑,或使用tRPC 和GraphQL 等 API 库。
getServerSideProps
// (in /pages/index.tsx)
// Alternatively, you can use `getStaticProps`
// in place of `getServerSideProps`.
export const getServerSideProps = async () => {
const feed = await prisma.post.findMany({
where: {
published: true,
},
})
return { props: { feed } }
}
Next.js 会将道具传递给您的 React 组件,您可以在其中显示来自数据库的数据。
API 路由
// Fetch all posts (in /pages/api/posts.ts)
const prisma = new PrismaClient()
export default async function handle(req, res) {
const posts = await prisma.post.findMany({
where: {
published: true,
},
})
res.json(posts)
}
请注意,您可以在 Next.js API 路由中使用 Prisma ORM 来向您的数据库发送查询 - 使用 REST、GraphQL 和 tRPC。
然后,您可以获取数据并在前端显示它。
可运行的全栈示例项目
您可以在prisma-examples
存储库中找到一些可运行的示例,展示了如何使用 Prisma 客户端构建全栈应用程序。
示例 | 描述 |
---|---|
Next.js(API 路由) | 使用getServerSideProps 和 API 路由的全栈 Next.js 应用程序 |
Next.js(GraphQL) | 使用 GraphQL Yoga、Pothos 和 Apollo Client 的全栈 Next.js 应用程序 |
Next.js(tRPC) | 使用 tRPC 的全栈 Next.js 应用程序 |
Next.js(带有身份验证的 API 路由) | 使用getServerSideProps 、API 路由和NextAuth 的全栈 Next.js 应用程序 |
Remix | 使用操作和加载器的全栈 Remix 应用程序 |
SvelteKit | 使用操作和加载器的全栈 Sveltekit 应用程序 |
Nuxt(REST API) | 使用 API 路由的全栈 Nuxt 应用程序 |