TypeORM - 实体监听器和日志记录


实体监听器用于支持自定义方法并监听特定事件的实体。我们可以使用装饰器定义任何实体自定义方法。让我们简单地了解一下装饰器。

  • @AfterLoad - 当使用 QueryBuilder 或存储库/管理器加载实体时,将调用此方法。
  • @BeforeInsert - 此方法将在使用存储库/管理器插入实体之前调用。
  • @AfterInsert - 使用存储库/管理器插入实体后将调用此方法。
  • @BeforeUpdate - 此方法将在使用存储库/管理器更新现有实体之前调用它。
  • @AfterUpdate - 它将在实体更新后调用。
  • @BeforeRemove - 它将在实体被删除之前调用。
  • @AfterRemove - 它将在实体被删除后调用。

订户

订阅者用于监听特定实体事件。它是从EntitySubscriberInterface实现的。让我们了解一个如何在订阅者中使用实体侦听器的简单示例。考虑学生实体如下所示 -

学生.ts

import {Entity, PrimaryGeneratedColumn, Column} from "typeorm"; 

@Entity() 
export class Student {     

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   Name: string; 
   
   @Column() 
   age: number; 
}

创建学生订阅者

订阅者是使用以下命令创建的 -

typeorm subscriber:create -n StudentSubscriber

上面的命令在您的项目 src 中创建一个订阅者目录。然后,在您的订阅者中创建 StudentSubscriber.ts 文件。您可以看到以下响应,

Subscriber /Users/workspace/TypeORM/FirstProject/src/subscriber/StudentSubscriber.ts has been created successfully.

现在转到文件,您可以看到以下编码 -

学生订阅者.ts

import {EventSubscriber, EntitySubscriberInterface} from "typeorm"; 

@EventSubscriber() 
export class StudentSubscriber implements EntitySubscriberInterface<any> { 
}

现在,在文件中添加以下更改,

import {EventSubscriber, EntitySubscriberInterface,InsertEvent} from "typeorm"; 
import {Student} from "../entity/Student"; 

@EventSubscriber() 
export class StudentSubscriber implements EntitySubscriberInterface<any> { 
   listenTo() 
   { 
      return Student; 
   } 
   
   afterInsert(event: InsertEvent<Student>) { 
      console.log(event); 
   } 
}

这里,

我们使用afterInsert()方法来调用实体事件。同样,您也可以使用其他事件。我们已经配置了 ormconfig.json 文件。现在,在index.ts文件中添加以下更改,如下所示 -

索引.ts

import "reflect-metadata"; import {createConnection} from "typeorm"; import {Student} from "./entity/Student"; 

createConnection().then(async connection => {

   console.log('connection established'); 
}).catch(error => console.log(error));

执行应用程序后,您可以在屏幕上看到以下输出,

应用

记录

数据库日志记录是高可用数据库解决方案设计的重要组成部分,因为数据库日志可以从故障中恢复,并且可以同步主数据库和辅助数据库。

所有数据库都有与其关联的日志。这些日志保存数据库更改的记录。如果数据库需要恢复到上次完整脱机备份之后的某个点,则需要使用日志将数据前滚到故障点。

记录选项

通过在数据库连接中添加 {logging: true} 来启用日志记录。日志记录选项分为不同类型。它们如下 -

查询- 返回所有日志查询。它的定义如下 -

{ 
   host: "localhost",
   ... 
   logging: ["query"] 
}

error - 返回所有失败查询和错误的日志。它的定义如下 -

{ 
   host: "localhost",
   ... 
   logging: ["error"] 
}

schema - 返回模式的日志。

warn - 返回内部 ORM 警告。

info - 返回日志内部 ORM 信息消息。

log - 返回内部 ORM 日志消息。

自定义记录器

自定义日志记录是简单且高度可定制的日志记录选项。我们可以使用下面的代码创建我们自己的记录器类 -

import {Logger} from "typeorm"; 

export class MyCustomLogger implements Logger { 
   
   // implement all methods from logger class 
}

连接选项在 ormconfig.json 中指定,如下所示 -

name: "mysql", 
type: "mysql", 
host: "localhost", 
port: 3306, 
username: "root", 
password: "root", 
database: "test", 
logger: new MyCustomLogger()