📜  TypeORM-实体侦听器和日志记录

📅  最后修改于: 2020-10-19 03:44:03             🧑  作者: Mango


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

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

订户

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

学生

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.

现在移至文件,您可以看到以下代码-

学生订阅者

import {EventSubscriber, EntitySubscriberInterface} from "typeorm"; 

@EventSubscriber() 
export class StudentSubscriber implements EntitySubscriberInterface { 
}

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

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

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

这里,

我们已经使用afterInsert()方法来调用实体事件。同样,您也可以使用其他事件。我们已经配置了ormconfig.json文件。现在,在index.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"] 
}

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

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

模式-返回模式的日志。

警告-返回内部ORM警告。

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

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

自定义记录器

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

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()