TypeORM - Listener e registrazione di entità

Il listener di entità viene utilizzato nelle entità che supportano il metodo personalizzato e ascoltano eventi specifici. Possiamo definire qualsiasi metodo personalizzato di entità utilizzando i decoratori. Capiamo in breve i decoratori.

  • @AfterLoad - Quando l'entità viene caricata utilizzando QueryBuilder o repository / manager, verrà chiamato questo metodo.
  • @BeforeInsert - Questo metodo chiamerà prima che l'entità venga inserita utilizzando repository / manager.
  • @AfterInsert - Questo metodo chiamerà dopo che l'entità è stata inserita utilizzando repository / manager.
  • @BeforeUpdate - Questo metodo lo chiamerà prima che un'entità esistente venga aggiornata utilizzando repository / manager.
  • @AfterUpdate - Chiamerà dopo che un'entità è stata aggiornata.
  • @BeforeRemove - Chiamerà prima che un'entità venga rimossa.
  • @AfterRemove - Chiamerà dopo che un'entità è stata rimossa.

Abbonato

L'abbonato viene utilizzato per ascoltare eventi di entità specifiche. È implementato daEntitySubscriberInterface. Comprendiamo un semplice esempio di come utilizzare il listener di entità nell'abbonato. Considera che l'entità Studente è mostrata di seguito:

Student.ts

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

@Entity() 
export class Student {     

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

Crea abbonato studente

L'abbonato viene creato utilizzando il comando seguente:

typeorm subscriber:create -n StudentSubscriber

Il comando precedente crea una directory del sottoscrittore all'interno del tuo progetto src. Quindi, il file StudentSubscriber.ts viene creato all'interno del tuo abbonato. Potresti vedere la seguente risposta,

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

Ora sposta su file, potresti vedere la codifica seguente:

StudentSubscriber.ts

import {EventSubscriber, EntitySubscriberInterface} from "typeorm"; 

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

Ora aggiungi le seguenti modifiche nel file,

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

Qui,

Abbiamo usato afterInsert()metodo per chiamare l'evento dell'entità. Allo stesso modo, puoi utilizzare anche altri eventi. Abbiamo già configurato il file ormconfig.json. Ora aggiungi le seguenti modifiche inindex.ts file come segue -

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

Dopo aver eseguito l'applicazione, potresti vedere l'output di seguito sullo schermo,

Registrazione

La registrazione del database è una parte importante della progettazione della soluzione di database a disponibilità elevata perché i registri del database consentono il ripristino da un errore e consentono di sincronizzare i database primari e secondari.

A tutti i database sono associati dei registri. Questi registri conservano i record delle modifiche al database. Se un database deve essere ripristinato a un punto oltre l'ultimo backup completo e non in linea, i log sono necessari per eseguire il roll forward dei dati fino al punto di errore.

Opzioni di registrazione

La registrazione viene abilitata aggiungendo {logging: true} nella connessione al database. Le opzioni di registrazione sono classificate in diversi tipi. Sono i seguenti:

query- restituisce tutte le query di registro. È definito come indicato di seguito:

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

error- restituisce i log per tutte le query e gli errori non riusciti. È definito di seguito:

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

schema - restituisce i log per lo schema.

warn - restituisce avvisi ORM interni.

info - restituisce i log dei messaggi informativi interni di ORM.

log - restituisce i messaggi di registro ORM interni.

Registratore personalizzato

La registrazione personalizzata è un'opzione di registrazione semplice e altamente personalizzabile. Possiamo creare la nostra classe logger utilizzando il codice seguente:

import {Logger} from "typeorm"; 

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

L'opzione di connessione è specificata in ormconfig.json come segue:

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