事件处理是我们开发中常用的模块,不过 Nest 没有官方支持, 这里推荐大家使用 nest-event 这个开源项目.
该项目的特点:
- 抛出事件
import { NestEventEmitter } from './nest-event';
@Controller('user')
export class UserController {
  constructor(
    private readonly nestEventEmitter: NestEventEmitter,
    ) {}
  @Post('signup')
  signup() {
    // ...
    this.nestEventEmitter.emit('user-created', user);
  }
}
通过注入获得 eventEmitter
- 响应事件
import { Injectable } from '@nestjs/common';
import { On } from './nest-event';
import { User } from './interfaces';
@Injectable()
export class EmailService {
  @On('user-created')
  onUserCreated(user: User){
    // send verification email
  }
}
使用注解来响应事件,简洁明了
- 还支持给 event 加上类型
// define your events
interface Events {
   request: (request: Request, response: Response) => void;
   done: void;
}
this.nestEventEmitter.strictEmitter<Events>().emit('done');
如果 emit 的参数不符合类型定义,将会报错, 具体见 StrictEventEmitter