Nest 广播
两个模块之间的耦合我们一般都是依赖注入,但是还有一种方法是事件监听
前置
安装
ts
npm i --save @nestjs/event-emitter配置
- AppModule 里面引入
ts
import { Module } from "@nestjs/common";
import { EventEmitterModule } from "@nestjs/event-emitter";
import { AaaModule } from "./modules/aaa/aaa.module";
import { BbbModule } from "./modules/bbb/bbb.module";
@Module({
imports: [
// 事件模块
EventEmitterModule.forRoot(),
// 两个模块
AaaModule,
BbbModule,
],
controllers: [],
providers: [],
})
export class AppModule {}使用
a 发送给 b
- aaa.service.ts
ts
import { Inject, Injectable } from "@nestjs/common";
// 注入广播
import { EventEmitter2 } from "@nestjs/event-emitter";
@Injectable()
export class AaaService {
// 注入服务
@Inject()
private readonly emitter: EventEmitter2;
//查询A的时候广播
findAll() {
// 发送广播
this.emitter.emit("aaa.find", { data: "查询A的时候广播" });
return `This action returns all aaa`;
}
}b 接收
ts
import { Injectable } from "@nestjs/common";
// 监听广播
import { OnEvent } from "@nestjs/event-emitter";
@Injectable()
export class BbbService {
// 注入查询
@OnEvent("aaa.find")
handleaaaFind(data) {
console.log(data);
// 再去执行其他方法比如说写日志之类的
this.writeLog();
}
writeLog() {
console.log("写日志");
}
findAll() {
return `This action returns all bbb`;
}
}总结
这样就可以不依赖注入而是通过广播的方式来进行模块之间的通信
但是这种方式耦合度太高,不推荐使用