在应用里发布事件可以使用 EventBus 里提供的 publish 方法。要使用 EventBus 需要先在模块里导入 CqrsModule 模块,下面我要在 UserModule 模块里的一个命令处理器里面用一下这个 EventBus,所以就需要先在 UserModule 模块里面,导入这个 CqrsModule。
然后打开 CreateUserCommandHandler,先在类里面注入 EventBus,在类里面,添加一个构造方法。然后定义一个参数属性,private readonly eventBus,类型是 EventBus,这个 EventBus 来自 @nestjs/cqrs。
执行了这个 CreateUserCommand 命令,可以再发布一个事件,在 execute 方法里面,用一下 this.eventBus 上的 publish 方法,新建一个 UserCreatedEvent ,给它提供一个 user,可以直接把 command 里的 user 交给它。
打开一个 Http 客户端,用 POST 方法请求一下 localhost:3000/users,请求里要带着一个 JSON 数据,数据里有个 name 属性。 发送一下这个请求。
然后回到运行项目开发服务的终端观察一下,这里输出了一个 UserCreatedEvent 。 它里面有个 user 属性。属性的值是一个用户数据。
打开 UserController,在客户端,用 HTTP 的 POST 方法请求 users 地址的时候,会执行 createUser 方法,这个方法里面会执行一个 CreateUserCommand 命令,在这个命令的处理器里面,又会发布一个 UserCreatedEvent 事件。这个事件处理器要做的事情就是在控制台上输出这个 event。