使用 Prisma 開發者友好的資料庫工具構建高效能、型別安全的 NestJS 應用:全球最受歡迎的 TypeScript ORM 和首個無冷啟動的無伺服器資料庫。
使用 Prisma 體驗 NestJS
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 官方文件中學習如何在 NestJS 中使用 Prisma。
這個 npm 庫幫助您在 NestJS 應用程式中整合 Prisma ORM。它的 PrismaModule 提供了對 PrismaService 的訪問,您可以透過依賴注入在控制器、解析器、服務、守衛等中使用它。
一個關於使用 Prisma 構建 NestJS REST API 的綜合教程系列。
一篇深入探討 NestJS 應用程式從 TypeORM 遷移到 Prisma 過程的文章。