使用 Prisma 开发者友好的数据库工具构建高性能、类型安全的 NestJS 应用程序:全球最受欢迎的 TypeScript ORM 和第一个无冷启动的无服务器数据库。
试用 NestJS 与 Prisma
Prisma Postgres 基于单核系统(unikernels)构建,在裸机服务器上运行,以实现峰值性能和无限可伸缩性。
第一个采用即用即付定价、无需基础设施管理且零冷启动的无服务器数据库。
为任何数据库查询添加缓存策略,其结果将缓存在离用户最近的地方,以实现峰值性能和用户体验。
Prisma ORM 是类型安全 ORM 的先驱。与 NestJS 搭配使用,通过强类型实现高生产力和信心。
Prisma 基于服务的设计天然适合 NestJS 的依赖注入系统,使数据库访问在整个应用程序模块中可用。
NestJS 和 Prisma 都拥有充满活力的社区,您可以在其中找到支持、有趣的活动和出色的开发者。
Prisma Postgres 与 NestJS 的依赖注入系统和模块化架构完美集成。通过创建扩展 PrismaClient 的 PrismaService,您可以在整个应用程序中注入数据库访问。
// src/prisma/prisma.service.tsimport { 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 端点和数据库操作之间创建了清晰的分离。以下是您如何为用户实现 GET 和 POST 路由的方法
// src/users/users.controller.tsimport { 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.tsimport { 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 的依赖注入系统和模块化架构完美集成。通过创建扩展 PrismaClient 的 PrismaService,您可以在整个应用程序中注入数据库访问。
// src/prisma/prisma.service.tsimport { 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 端点和数据库操作之间创建了清晰的分离。以下是您如何为用户实现 GET 和 POST 路由的方法
// src/users/users.controller.tsimport { 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.tsimport { 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 所需的一切的入门工具包。
在官方 NestJS 文档中学习如何将 Prisma 与 NestJS 结合使用。
这个 npm 库可帮助您在 NestJS 应用程序中集成 Prisma ORM。它的 PrismaModule 提供了 PrismaService 的访问权限,您可以通过依赖注入在控制器、解析器、服务、守卫等中使用它。
关于使用 Prisma 构建 NestJS REST API 的综合教程系列。
一篇关于将 NestJS 应用程序从 TypeORM 迁移到 Prisma 的深入文章。