Next.js 中使用数据库最简单的方式

使用 Prisma 开发者友好的数据库工具构建高性能、类型安全的 Next.js 应用程序:全球**最流行的 TypeScript ORM** 和**首个无冷启动的无服务器数据库**。

试用 Next.js 与 Prisma

为何选择 Next.js 和 Prisma

专为高性能 Web 应用打造

Prisma Postgres 基于 unikernels 构建,在裸机服务器上运行,以实现最高性能和无限可扩展性。

无服务器,无冷启动

首个无服务器数据库,采用按需付费模式,无需基础设施管理,并且零冷启动

灵活的数据获取与渲染

使用客户端渲染、服务器端渲染和静态站点生成来显示您的数据。

内置全球缓存

为任何数据库查询添加缓存策略,其结果将缓存在靠近用户的位置,以实现最佳性能和用户体验。

端到端类型安全

将 Prisma 与 Next.js 结合使用,可确保您的应用程序从数据库到 React 组件都具有一致的类型。

有用的社区

Next.js 和 Prisma 都拥有活跃的社区,您可以在其中找到支持、有趣的活动和优秀的开发者。

Prisma 和 Next.js 如何协同工作

Prisma 的数据库工具非常适合构建 Next.js 应用程序。它们充当服务器组件(静态和动态)、服务器操作、路由处理程序和独立服务的数据访问层。

静态数据

使用 Prisma 进行静态站点生成

Next.js 13+ 引入了数据获取方式的根本性转变。作为 App Router 默认设置的服务器组件,允许您直接在组件中获取数据,无需额外的封装或特殊函数。这意味着您可以在组件中直接使用 Prisma,并在可能的情况下自动实现静态生成。

以下是如何实现一个在构建时静态生成的博客页面。数据获取发生在服务器端,HTML 在构建过程中生成一次。

// app/blog/[slug]/page.tsx
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// Return a list of `params` to populate the [slug] dynamic segment
export async function generateStaticParams() {
const posts = await prisma.post.findMany()
return posts.map((post) => ({
slug: post.slug,
}))
}
// Multiple versions of this page will be statically generated
// using the `params` returned by `generateStaticParams`
export default async function Page({ params }: { params: { slug: string } }) {
// Fetch the post based on slug
const post = await prisma.post.findUnique({
where: { slug: params.slug },
})
// Simple demo rendering
return (
<div>
<h1>{post?.title || 'Post not found'}</h1>
<p>{post?.content || 'No content available'}</p>
</div>
)
}
动态数据
服务器操作
API 路由
客户端组件

使用 Prisma 进行静态站点生成

Next.js 13+ 引入了数据获取方式的根本性转变。作为 App Router 默认设置的服务器组件,允许您直接在组件中获取数据,无需额外的封装或特殊函数。这意味着您可以在组件中直接使用 Prisma,并在可能的情况下自动实现静态生成。

以下是如何实现一个在构建时静态生成的博客页面。数据获取发生在服务器端,HTML 在构建过程中生成一次。

// app/blog/[slug]/page.tsx
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// Return a list of `params` to populate the [slug] dynamic segment
export async function generateStaticParams() {
const posts = await prisma.post.findMany()
return posts.map((post) => ({
slug: post.slug,
}))
}
// Multiple versions of this page will be statically generated
// using the `params` returned by `generateStaticParams`
export default async function Page({ params }: { params: { slug: string } }) {
// Fetch the post based on slug
const post = await prisma.post.findUnique({
where: { slug: params.slug },
})
// Simple demo rendering
return (
<div>
<h1>{post?.title || 'Post not found'}</h1>
<p>{post?.content || 'No content available'}</p>
</div>
)
}

如果您需要在 React 应用程序中使用数据库,Next.js 和 Prisma 是**终极组合**!🚀

Guillermo Rauch
Guillermo Rauch -
首席执行官兼创始人
Vercel

精选 Prisma 和 Next.js 社区示例

一个现代 SaaS 应用程序的启动模板!next-forge 包含了 Next.js 15、认证、数据库和 ORM、支付、文档、博客、可观察性、分析、电子邮件以及更多功能,为您节省了下一个 Next.js SaaS 应用程序的初始样板代码。

学习在 Next.js App Router 中使用 Prisma 的最佳实践!探索服务器组件、服务器操作和边缘中间件,以及高效查询、处理迁移和部署到 Vercel。完善您的数据库工作流程并无缝扩展!

t3 是一个专注于简洁性、模块化和全栈类型安全的 Web 开发技术栈。它包括 Next.js、tRPC、Tailwind、TypeScript、Prisma 和 NextAuth。

Blitz.js 是一个基于 Next.js 和 Prisma 构建的应用程序框架。它带回了像 Ruby on Rails 这样的服务器渲染框架的简洁性和约定,同时保留了开发者喜爱 React 和客户端渲染的所有优点。

这个长达 4 小时的综合教程将教您如何构建一个全栈表单应用程序。该表单将是响应式的,支持拖放功能,并提供不同类型的布局字段,如标题、副标题和段落,以及各种类型的字段,如文本、数字、下拉菜单、日期、复选框和文本区域。

加入 Prisma 社区

我们有多个渠道,您可以在其中与社区成员以及 Prisma 团队互动。

Discord

与社区成员和我们的团队实时聊天、交流并分享想法。

了解更多

GitHub

浏览 Prisma 源代码,发送反馈,并获得技术问题的答案。

了解更多

X

获取最新动态,与我们的团队互动,并成为我们活跃在线社区不可或缺的一部分。

了解更多

Youtube

获取最新动态,与我们的团队互动,并成为我们活跃在线社区不可或缺的一部分。

了解更多
© . All rights reserved.