面向 NestJS 应用的企业级数据库

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

使用 Prisma 体验 NestJS

为何选择 NestJS 和 Prisma?

为高性能 Web 应用而生

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

无服务器,无冷启动

首个提供 按用量付费定价、无需基础设施管理并具备 零冷启动 的无服务器数据库。

内置全球缓存

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

TypeScript 优先

Prisma ORM 是类型安全 ORM 的先驱。与 NestJS 结合使用,它通过强类型实现高生产力和高置信度。

完美支持依赖注入

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

活跃的社区

NestJS 和 Prisma 都拥有活跃的社区,您可以在其中获得支持、参与有趣的活动并结识优秀的开发者。

Prisma Postgres 与 NestJS 如何协同工作

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

基本 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 官方文档中学习如何在 NestJS 中使用 Prisma。

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

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

一篇深入探讨 NestJS 应用程序从 TypeORM 迁移到 Prisma 过程的文章。

加入 Prisma 社区

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

Discord

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

了解更多

GitHub

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

了解更多

X

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

了解更多

Youtube

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

了解更多
© . All rights reserved.