监听器

任何实体都可以使用具有侦听特定实体事件的自定义逻辑的方法。你必须使用特殊装饰器标记这些方法,具体取决于要侦听的事件。

@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. }

@BeforeInsert

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

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

@AfterInsert

你可以在实体中定义具有任何名称的方法,并使用@AfterInsert标记它,并且在使用 repository/manager save插入实体后,TypeORM 将调用它。

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

@BeforeUpdate

你可以在实体中定义具有任何名称的方法,并使用@BeforeUpdate标记它,并且 TypeORM 将在使用 repository/manager save更新现有实体之前调用它。 但请记住,只有在模型中更改信息时才会出现这种情况。 如果运行save而不修改模型中的任何内容,@BeforeUpdate@AfterUpdate将不会运行。例如:

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

@AfterUpdate

你可以在实体中定义具有任何名称的方法,并使用@AfterUpdate标记它,并且在使用 repository/manager save更新现有实体后,TypeORM 将调用它。例如:

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

@BeforeRemove

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

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

@AfterRemove

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

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