面向 NestJS 的下一代全类型安全 ORM

在 NestJS 应用中使用 Prisma(一款更优秀的 JavaScript 和 TypeScript ORM)查询来自 MySQL、PostgreSQL & SQL Server 数据库的数据。

tech

什么是 Prisma?

Prisma 让数据处理变得简单!它提供类型安全的 Node.js & TypeScript ORM、全局数据库缓存、连接池以及实时数据库事件。

查询
// Creating a new record
await prisma.user.create({
firstName: “Alice”,
email: “alice@prisma.io”
})
表格
id firstName email
1 Bobby bobby@tables.io
2 Nilufar nilu@email.com
3 Jürgen jums@dums.edu
4 Alice alice@prisma.io

Prisma 和 NestJS 如何协同工作

Prisma ORM 是一款下一代 ORM,可用于在 NestJS 应用中查询数据库。它拥抱 TypeScript 以避免运行时错误并提高生产力。它提供的类型安全远远超出了 TypeORM 或 Sequelize 等传统 ORM 的保证(了解更多)。
Prisma 与 NestJS 的模块化架构无缝集成,无论您是构建 REST 还是 GraphQL API。

您还可以使用我们的附加工具来强化 Prisma ORM 的使用
Prisma Accelerate 是一款全局数据库缓存和可伸缩连接池,可加快您的数据库查询速度。
Prisma Pulse 使您能够以类型安全的方式构建响应式、实时应用程序。

Prisma 和 NestJS 代码示例

将 NestJS 和 Prisma 结合使用提供了新的类型安全级别,这是 Node.js & TypeScript 生态系统中任何其他 ORM 都无法实现的。此示例演示如何使用 Prisma Client

通过实现一个 UserService 类,遵循 NestJS 的模块化架构,通过依赖注入向您的应用程序控制器提供 CRUD 或领域特定的操作。

PrismaService

PrismaService

可以通过扩展生成的 PrismaClient 来实现 PrismaService 类,以便构建与 NestJS 架构集成的 Prisma Client 抽象。它将通过依赖注入提供给其他服务和控制器。

1import { Injectable, OnModuleInit, INestApplication } from '@nestjs/common'
2import { PrismaClient } from '@prisma/client'
3
4@Injectable()
5export class PrismaService extends PrismaClient
6 implements OnModuleInit {
7
8 async onModuleInit() {
9 await this.$connect();
10 }
11}
AppController
Prisma schema

PrismaService

可以通过扩展生成的 PrismaClient 来实现 PrismaService 类,以便构建与 NestJS 架构集成的 Prisma Client 抽象。它将通过依赖注入提供给其他服务和控制器。

1import { Injectable, OnModuleInit, INestApplication } from '@nestjs/common'
2import { PrismaClient } from '@prisma/client'
3
4@Injectable()
5export class PrismaService extends PrismaClient
6 implements OnModuleInit {
7
8 async onModuleInit() {
9 await this.$connect();
10 }
11}

为何选择 Prisma 和 NestJS?

拥抱 TypeScript

Prisma 是第一个提供完整类型安全的 ORM,即使在查询部分模型和关系时也是如此。

流畅集成

Prisma 完美契合 NestJS 的模块化架构,并提供强大的数据库访问层。

类型安全数据库客户端

Prisma Client 确保完全类型安全的数据库查询,并提供自动补全等优势——即使在 JavaScript 中也是如此。

直观的数据建模

Prisma 的声明式建模语言简单易用,让您可以直观地描述您的数据库模式。

轻松进行数据库迁移

从声明式 Prisma schema 生成可预测且可定制的 SQL 迁移。

专为构建 API 而设计

Prisma Client 通过为常见的 API 功能(例如分页、过滤等)提供查询来减少样板代码。

精选的 Prisma & NestJS 社区示例

包含 NestJS & Prisma 的生产就绪启动工具包

一个包含您在生产环境中构建带有 Prisma 的 NestJS 所需的一切的启动工具包。

NestJS 文档中的 Prisma

在官方 NestJS 文档中了解如何在 NestJS 中使用 Prisma。

使用 NestJS 和 Prisma 构建 REST API

关于使用 Prisma 构建 NestJS REST API 的全面研讨会和系列教程。

将大型生产应用从 TypeORM 迁移到 Prisma

一篇关于将 NestJS 应用从 TypeORM 迁移到 Prisma 过程的深度文章。