TypeORM 中使用订阅者(Subscriber)和监听器(Listener)实现生命周期钩子:
-
实体监听器: 在实体类中使用装饰器定义监听器:
typescript@Entity() export class User { @BeforeInsert() beforeInsert() { this.createdAt = new Date(); } @BeforeUpdate() beforeUpdate() { this.updatedAt = new Date(); } @AfterLoad() afterLoad() { // 加载后执行 } } -
订阅者: 独立的类,可以监听多个实体的生命周期事件:
typescript@EventSubscriber() export class UserSubscriber implements EntitySubscriberInterface<User> { listenTo() { return User; } beforeInsert(event: InsertEvent<User>) { console.log('Before insert:', event.entity); } } -
可用的事件:
- BeforeInsert / AfterInsert
- BeforeUpdate / AfterUpdate
- BeforeRemove / AfterRemove
- BeforeSoftRemove / AfterSoftRemove
- BeforeRecover / AfterRecover
- AfterLoad
-
注册订阅者: 在 DataSource 配置中添加 subscribers 选项。
生命周期钩子适用于数据验证、自动填充字段、日志记录等场景。