事件处理是我们开发中常用的模块,不过 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