• 订阅者和监听者装饰器
    • @AfterLoad
    • @BeforeInsert
    • @AfterInsert
    • @BeforeUpdate
    • @AfterUpdate
    • @BeforeRemove
    • @AfterRemove
    • @EventSubscriber

    订阅者和监听者装饰器

    @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的详细信息