TypeORM - Entity Listener y Logging

El detector de entidades se utiliza en entidades que admiten métodos personalizados y escuchan eventos específicos. Podemos definir cualquier método personalizado de entidad usando decoradores. Entendamos a los decoradores en breve.

  • @AfterLoad - Cuando la entidad se carga usando QueryBuilder o repositorio / administrador, se llamará a este método.
  • @BeforeInsert - Este método llamará antes de que se inserte la entidad usando el repositorio / administrador.
  • @AfterInsert - Este método llamará después de que la entidad se inserte usando el repositorio / administrador.
  • @BeforeUpdate - Este método lo llamará antes de que una entidad existente se actualice usando el repositorio / administrador.
  • @AfterUpdate - Llamará después de que se actualice una entidad.
  • @BeforeRemove - Llamará antes de que se elimine una entidad.
  • @AfterRemove - Llamará después de que se elimine una entidad.

Abonado

El suscriptor se utiliza para escuchar eventos de entidad específicos. Se implementa desdeEntitySubscriberInterface. Entendamos un ejemplo simple de cómo usar el detector de entidad en el suscriptor. Considere que la entidad Student se muestra a continuación:

Student.ts

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

@Entity() 
export class Student {     

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

Crear suscriptor de estudiante

El suscriptor se crea usando el siguiente comando:

typeorm subscriber:create -n StudentSubscriber

El comando anterior crea un directorio de suscriptores dentro de su proyecto src. Luego, el archivo StudentSubscriber.ts se crea dentro de su suscriptor. Podrías ver la siguiente respuesta,

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

Ahora muévase al archivo, podría ver la siguiente codificación:

StudentSubscriber.ts

import {EventSubscriber, EntitySubscriberInterface} from "typeorm"; 

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

Ahora, agregue los siguientes cambios en el archivo,

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); 
   } 
}

Aquí,

Hemos usado afterInsert()método para llamar al evento de entidad. Del mismo modo, también puede utilizar otros eventos. Ya hemos configurado el archivo ormconfig.json. Ahora, agregue los siguientes cambios enindex.ts archivo de la siguiente manera:

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

Después de ejecutar la aplicación, puede ver el siguiente resultado en su pantalla,

Inicio sesión

El registro de la base de datos es una parte importante del diseño de su solución de base de datos de alta disponibilidad porque los registros de la base de datos permiten recuperarse de una falla y permiten sincronizar las bases de datos primarias y secundarias.

Todas las bases de datos tienen registros asociados. Estos registros mantienen registros de los cambios en la base de datos. Si es necesario restaurar una base de datos a un punto posterior a la última copia de seguridad completa fuera de línea, se requieren registros para transferir los datos al punto de falla.

Opciones de registro

El registro se habilita agregando {logging: true} en la conexión de la base de datos. Las opciones de registro se clasifican en diferentes tipos. Son los siguientes:

query- devolver todas las consultas de registro. Se define como se indica a continuación:

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

error- Registros de retorno de todas las consultas fallidas y errores. Se define a continuación:

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

schema - Registros de retorno para el esquema.

warn - devolver advertencias internas de ORM.

info - Registros de retorno de mensajes informativos internos de ORM.

log - devolver mensajes de registro ORM internos.

Registrador personalizado

El registro personalizado es una opción de registro simple y altamente personalizable. Podemos crear nuestra propia clase de registrador usando el siguiente código:

import {Logger} from "typeorm"; 

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

La opción de conexión se especifica en ormconfig.json de la siguiente manera:

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