- 订阅者和监听者装饰器
@AfterLoad
@BeforeInsert
@AfterInsert
@BeforeUpdate
@AfterUpdate
@BeforeRemove
@AfterRemove
@EventSubscriber
订阅者和监听者装饰器
@AfterLoad
你可以在实体中定义具有任何名称的方法,并使用@AfterLoad
标记,TypeORM 将在每次使用QueryBuilder
或 repository/ manager 查找方法加载时调用它。例如:
@Entity()
export class Post {
@AfterLoad()
updateCounters() {
if (this.likesCount === undefined) this.likesCount = 0;
}
}
了解有关listeners的更多信息。
@BeforeInsert
你可以在实体中定义任何名称的方法,并使用@BeforeInsert
标记,TypeORM 将在使用 repository/managersave
插入实体之前调用它。例如:
@Entity()
export class Post {
@BeforeInsert()
updateDates() {
this.createdDate = new Date();
}
}
了解有关listeners的更多信息。
@AfterInsert
你可以在实体中定义任何名称的方法,并使用@AfterInsert
标记,TypeORM 将在使用 repository/managersave
插入实体后调用它。例如:
@Entity()
export class Post {
@AfterInsert()
resetCounters() {
this.counters = 0;
}
}
了解有关 listeners的更多信息。
@BeforeUpdate
你可以在实体中定义任何名称的方法,并使用@BeforeUpdate
标记,TypeORM 将在使用 repository/managersave
更新现有实体之前调用它。例如:
@Entity()
export class Post {
@BeforeUpdate()
updateDates() {
this.updatedDate = new Date();
}
}
了解有关 listeners的更多信息。
@AfterUpdate
你可以在实体中定义任何名称的方法,并使用@AfterUpdate
标记,TypeORM 将在使用存储库/管理器save
更新现有实体之后调用它。例如:
@Entity()
export class Post {
@AfterUpdate()
updateCounters() {
this.counter = 0;
}
}
了解有关 listeners 的更多信息
@BeforeRemove
你可以在实体中定义任何名称的方法,并使用@BeforeRemove
标记,TypeORM 将在使用 repository/managerremove
删除实体之前调用它。例如:
@Entity()
export class Post {
@BeforeRemove()
updateStatus() {
this.status = "removed";
}
}
了解有关 listeners的更多信息。
@AfterRemove
你可以在实体中定义一个任何名称的方法,并使用@AfterRemove
标记它,TypeORM 将在使用 repository/managerremove
删除实体之后调用它。例如:
@Entity()
export class Post {
@AfterRemove()
updateStatus() {
this.status = "removed";
}
}
了解有关 listeners的更多信息。
@EventSubscriber
将类标记为可以侦听特定实体事件或任何实体事件的事件订阅者。使用QueryBuilder
和 repository/manager 方法触发事件。例如:
@EventSubscriber()
export class PostSubscriber implements EntitySubscriberInterface<Post> {
/**
* 表示此订阅者仅侦听Post事件。
*/
listenTo() {
return Post;
}
/**
* 在POST INSERTED之前调用。
*/
beforeInsert(event: InsertEvent<Post>) {
console.log(`BEFORE POST INSERTED: `, event.entity);
}
}
你可以从EntitySubscriberInterface
实现任何方法。要监听任何实体,只需省略listenTo
方法并使用any
:
@EventSubscriber()
export class PostSubscriber implements EntitySubscriberInterface {
/**
* 在ENTITY INSERTED之前
*/
beforeInsert(event: InsertEvent<any>) {
console.log(`BEFORE ENTITY INSERTED: `, event.entity);
}
}
了解有关 subscribers的详细信息