订阅者和监听者装饰器

@AfterLoad

你可以在实体中定义具有任何名称的方法,并使用@AfterLoad标记,TypeORM 将在每次使用QueryBuilder或 repository/ manager 查找方法加载时调用它。例如:

  1. @Entity()
  2. export class Post {
  3. @AfterLoad()
  4. updateCounters() {
  5. if (this.likesCount === undefined) this.likesCount = 0;
  6. }
  7. }

了解有关listeners的更多信息。

@BeforeInsert

你可以在实体中定义任何名称的方法,并使用@BeforeInsert标记,TypeORM 将在使用 repository/managersave插入实体之前调用它。例如:

  1. @Entity()
  2. export class Post {
  3. @BeforeInsert()
  4. updateDates() {
  5. this.createdDate = new Date();
  6. }
  7. }

了解有关listeners的更多信息。

@AfterInsert

你可以在实体中定义任何名称的方法,并使用@AfterInsert标记,TypeORM 将在使用 repository/managersave插入实体后调用它。例如:

  1. @Entity()
  2. export class Post {
  3. @AfterInsert()
  4. resetCounters() {
  5. this.counters = 0;
  6. }
  7. }

了解有关 listeners的更多信息。

@BeforeUpdate

你可以在实体中定义任何名称的方法,并使用@BeforeUpdate标记,TypeORM 将在使用 repository/managersave更新现有实体之前调用它。例如:

  1. @Entity()
  2. export class Post {
  3. @BeforeUpdate()
  4. updateDates() {
  5. this.updatedDate = new Date();
  6. }
  7. }

了解有关 listeners的更多信息。

@AfterUpdate

你可以在实体中定义任何名称的方法,并使用@AfterUpdate标记,TypeORM 将在使用存储库/管理器save更新现有实体之后调用它。例如:

  1. @Entity()
  2. export class Post {
  3. @AfterUpdate()
  4. updateCounters() {
  5. this.counter = 0;
  6. }
  7. }

了解有关 listeners 的更多信息

@BeforeRemove

你可以在实体中定义任何名称的方法,并使用@BeforeRemove标记,TypeORM 将在使用 repository/managerremove删除实体之前调用它。例如:

  1. @Entity()
  2. export class Post {
  3. @BeforeRemove()
  4. updateStatus() {
  5. this.status = "removed";
  6. }
  7. }

了解有关 listeners的更多信息。

@AfterRemove

你可以在实体中定义一个任何名称的方法,并使用@AfterRemove标记它,TypeORM 将在使用 repository/managerremove删除实体之后调用它。例如:

  1. @Entity()
  2. export class Post {
  3. @AfterRemove()
  4. updateStatus() {
  5. this.status = "removed";
  6. }
  7. }

了解有关 listeners的更多信息。

@EventSubscriber

将类标记为可以侦听特定实体事件或任何实体事件的事件订阅者。使用QueryBuilder和 repository/manager 方法触发事件。例如:

  1. @EventSubscriber()
  2. export class PostSubscriber implements EntitySubscriberInterface<Post> {
  3. /**
  4. * 表示此订阅者仅侦听Post事件。
  5. */
  6. listenTo() {
  7. return Post;
  8. }
  9. /**
  10. * 在POST INSERTED之前调用。
  11. */
  12. beforeInsert(event: InsertEvent<Post>) {
  13. console.log(`BEFORE POST INSERTED: `, event.entity);
  14. }
  15. }

你可以从EntitySubscriberInterface实现任何方法。要监听任何实体,只需省略listenTo方法并使用any

  1. @EventSubscriber()
  2. export class PostSubscriber implements EntitySubscriberInterface {
  3. /**
  4. * 在ENTITY INSERTED之前
  5. */
  6. beforeInsert(event: InsertEvent<any>) {
  7. console.log(`BEFORE ENTITY INSERTED: `, event.entity);
  8. }
  9. }

了解有关 subscribers的详细信息