企业级 NestJS 应用程序数据库

使用 Prisma 开发者友好的数据库工具构建高性能、类型安全的 NestJS 应用程序:全球最受欢迎的 TypeScript ORM 和第一个无冷启动的无服务器数据库

试用 NestJS 与 Prisma

为什么选择 NestJS 和 Prisma?

专为高性能 Web 应用程序打造

Prisma Postgres 基于单核系统(unikernels)构建,在裸机服务器上运行,以实现峰值性能和无限可伸缩性。

无服务器,无冷启动

第一个采用即用即付定价、无需基础设施管理且零冷启动的无服务器数据库。

内置全局缓存

为任何数据库查询添加缓存策略,其结果将缓存在离用户最近的地方,以实现峰值性能和用户体验。

TypeScript 优先

Prisma ORM 是类型安全 ORM 的先驱。与 NestJS 搭配使用,通过强类型实现高生产力和信心。

非常适合依赖注入

Prisma 基于服务的设计天然适合 NestJS 的依赖注入系统,使数据库访问在整个应用程序模块中可用。

有益的社区

NestJS 和 Prisma 都拥有充满活力的社区,您可以在其中找到支持、有趣的活动和出色的开发者。

Prisma Postgres 和 NestJS 如何协同工作

Prisma 的数据库工具非常适合构建可扩展和类型安全的 NestJS 应用程序。Prisma 与 NestJS 的模块化架构无缝集成,无论您是构建 REST 还是 GraphQL API。

基本 CRUD

Prisma Postgres 与 NestJS 的依赖注入系统和模块化架构完美集成。通过创建扩展 PrismaClientPrismaService,您可以在整个应用程序中注入数据库访问。

// src/prisma/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
}

NestJS 的控制器/服务模式与 Prisma 的类型安全查询自然搭配,在您的 API 端点和数据库操作之间创建了清晰的分离。以下是您如何为用户实现 GETPOST 路由的方法

// src/users/users.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
@Post()
create(@Body() data: { name: string; email: string }) {
return this.usersService.create(data);
}
}

这些路由将按如下方式访问 PrismaService

// src/users/users.service.ts
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
@Injectable()
export class UsersService {
constructor(private prisma: PrismaService) {}
async findAll() {
return this.prisma.user.findMany();
}
async create(data: { name: string; email: string }) {
return this.prisma.user.create({
data,
});
}
}
认证守卫
事务
数据模型与迁移

Prisma Postgres 与 NestJS 的依赖注入系统和模块化架构完美集成。通过创建扩展 PrismaClientPrismaService,您可以在整个应用程序中注入数据库访问。

// src/prisma/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
}

NestJS 的控制器/服务模式与 Prisma 的类型安全查询自然搭配,在您的 API 端点和数据库操作之间创建了清晰的分离。以下是您如何为用户实现 GETPOST 路由的方法

// src/users/users.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
@Post()
create(@Body() data: { name: string; email: string }) {
return this.usersService.create(data);
}
}

这些路由将按如下方式访问 PrismaService

// src/users/users.service.ts
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
@Injectable()
export class UsersService {
constructor(private prisma: PrismaService) {}
async findAll() {
return this.prisma.user.findMany();
}
async create(data: { name: string; email: string }) {
return this.prisma.user.create({
data,
});
}
}

Prisma 和 NestJS 社区精选示例

一个涵盖您在生产环境中用 Prisma 构建 NestJS 所需的一切的入门工具包。

在官方 NestJS 文档中学习如何将 Prisma 与 NestJS 结合使用。

这个 npm 库可帮助您在 NestJS 应用程序中集成 Prisma ORM。它的 PrismaModule 提供了 PrismaService 的访问权限,您可以通过依赖注入在控制器、解析器、服务、守卫等中使用它。

关于使用 Prisma 构建 NestJS REST API 的综合教程系列。

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

加入 Prisma 社区

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

Discord

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

查找更多

GitHub

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

查找更多

X

保持更新,与我们的团队互动,并成为我们充满活力的在线社区不可或缺的一部分。

查找更多

Youtube

保持更新,与我们的团队互动,并成为我们充满活力的在线社区不可或缺的一部分。

查找更多
© . This site is unofficial and not affiliated with Prisma Data, Inc.