@nailyjs.nest.modules/prisma
v1.4.1
Published
Nestjs Prisma Module
Downloads
9
Readme
Nest.js 版 Prisma ☁️
中文 | English
本SDK为Prisma
的封装。提供了一种更高级的方式在Nest中使用Prisma
: 监听器。
安装 📦
npm
、yarn
、pnpm
都支持,推荐使用 pnpm
。
$ pnpm i --save @nailyjs.nest.modules/prisma prisma @prisma/client
使用 👋
导入模块 🧩
首先,先导入模块并配置。建议在根模块中导入。
正常用法 🚀
import { Module } from '@nestjs/common';
import { PrismaModule } from '@nailyjs.nest.modules/prisma';
@Module({
imports: [
// 导入Prisma模块。如果不注册任何监听器,可以这么导入。
PrismaModule.forRoot(),
],
})
export class AppModule {}
如何使用 🍞
从@nailyjs.nest.modules/prisma
导入PrismaService
,里面包含了PrismaClient
的所有方法。
import { Injectable } from '@nestjs/common';
import { PrismaService } from '@nailyjs.nest.modules/prisma';
@Injectable()
export class AppService {
constructor(private readonly prismaService: PrismaService) {}
async findMany() {
return this.prismaService.user.findMany();
}
}
监听器 🎉
PrismaClient
我直接作为令牌注入了,所以你也可以直接使用PrismaClient
。
但是,如果你想要监听PrismaClient
的方法,就不能直接使用PrismaClient
了,而是要使用PrismaService
。
所以我建议平常就使用PrismaService
,这样你可以在任何时候都可以添加监听器。
import { Injectable } from '@nestjs/common';
import { PrismaService } from '@nailyjs.nest.modules/prisma';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class AppService {
constructor(
// 允许直接注入PrismaService
private readonly prismaService: PrismaService,
// 可以直接注入PrismaClient。PrismaClient是一个单例。
private readonly prismaClient: PrismaClient,
) {}
public async findMany() {
// 这里的`findMany`方法会触发上面注册的监听器。
this.prismaService.user.findMany();
// 或者直接使用PrismaClient
// 但是要注意的是,这里不会触发监听器,因为监听器是在PrismaService中注册的,
// 要触发监听器,必须使用PrismaService中的方法。
this.prismaClient.user.findMany();
}
}
@Injectable()
export class PrismaListener {
/**
* 假设您有一个名为`user`的prisma模型,可以在这里注册一个监听器,监听`findMany`事件。
* BeforeListen顾名思义,就是在`findMany`方法执行之前执行的方法。
*/
@BeforeListen('user', 'findMany')
public async beforeFindMany() {
console.log('before findMany');
}
/**
* AfterListen顾名思义,就是在`findMany`方法执行之后执行的方法。
*/
@AfterListen('user', 'findMany')
public async afterFindMany() {
console.log('after findMany');
}
/**
* 监听器还支持这么写。TS会有非常完善的类型提示(小小地做了一下类型体操
*/
@BeforeListen('user.findMany')
public async beforeFindMany() {
console.log('before findMany');
}
/**
* 1.4.0版本之后支持多个监听器调用同一个方法。
*/
@AfterListen('user.findMany')
@BeforeListen('user.create')
public async afterFindMany() {
console.log('after findMany & before create');
}
}
然后,监听器必须要在模块中注册。
import { Module } from '@nestjs/common';
import { PrismaModule } from '@nailyjs.nest.modules/prisma';
import { PrismaListener } from './app.service';
@Module({
imports: [
PrismaModule.forRoot({
// 注册监听器
listeners: [PrismaListener],
}),
],
})
export class AppModule {}
作者 👨💻
Zero
- QQ:1203970284
- Gtihub: 跳转
☕️ 捐赠 ☕️
如果你觉得这个项目对你有帮助,你可以请我喝杯咖啡QWQ~