TypeORM - Listener e registro de entidades

O ouvinte de entidade é usado em entidades que oferecem suporte a métodos personalizados e a eventos específicos de escuta. Podemos definir qualquer método personalizado de entidade usando decoradores. Vamos entender os decoradores em poucas palavras.

  • @AfterLoad - Quando a entidade é carregada usando QueryBuilder ou repositório / gerenciador, este método será chamado.
  • @BeforeInsert - Este método irá chamar antes que a entidade seja inserida usando repositório / gerenciador.
  • @AfterInsert - Este método irá chamar depois que a entidade for inserida usando repositório / gerenciador.
  • @BeforeUpdate - Este método irá chamá-lo antes que uma entidade existente seja atualizada usando repositório / gerenciador.
  • @AfterUpdate - Ele irá chamar depois que uma entidade for atualizada.
  • @BeforeRemove - Ele irá chamar antes que uma entidade seja removida.
  • @AfterRemove - Ele ligará depois que uma entidade for removida.

Assinante

Assinante é usado para ouvir eventos de entidades específicas. É implementado a partir deEntitySubscriberInterface. Vamos entender um exemplo simples de como usar o ouvinte de entidade no assinante. Considere que a entidade Estudante é mostrada abaixo -

Student.ts

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

@Entity() 
export class Student {     

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

Criar aluno inscrito

O assinante é criado usando o comando abaixo -

typeorm subscriber:create -n StudentSubscriber

O comando acima cria um diretório de assinantes dentro do seu projeto src. Em seguida, o arquivo StudentSubscriber.ts é criado dentro de seu assinante. Você pode ver a seguinte resposta,

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

Agora vá para o arquivo, você pode ver a codificação abaixo -

StudentSubscriber.ts

import {EventSubscriber, EntitySubscriberInterface} from "typeorm"; 

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

Agora, adicione as seguintes alterações no arquivo,

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

Aqui,

Nós usamos afterInsert()método para chamar o evento da entidade. Da mesma forma, você também pode usar outros eventos. Já configuramos o arquivo ormconfig.json. Agora, adicione as alterações abaixo emindex.ts arquivo da seguinte forma -

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

Depois de executar o aplicativo, você pode ver a saída abaixo em sua tela,

Exploração madeireira

O log do banco de dados é uma parte importante do design de sua solução de banco de dados altamente disponível, porque os logs do banco de dados possibilitam a recuperação de uma falha e possibilitam a sincronização dos bancos de dados primários e secundários.

Todos os bancos de dados têm logs associados a eles. Esses logs mantêm registros das alterações do banco de dados. Se um banco de dados precisar ser restaurado a um ponto além do último backup off-line completo, os logs serão necessários para avançar os dados até o ponto de falha.

Opções de registro

O registro é habilitado adicionando {logging: true} na conexão do banco de dados. As opções de registro são classificadas em diferentes tipos. Eles são os seguintes -

query- retorna todas as consultas de log. É definido conforme abaixo -

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

error- retorna logs para todas as consultas com falha e erros. É definido abaixo -

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

schema - retorna logs para o esquema.

warn - retornar avisos ORM internos.

info - o retorno registra mensagens informativas ORM internas.

log - retornar mensagens de log ORM internas.

Logger personalizado

O registro personalizado é uma opção de registro simples e altamente personalizável. Podemos criar nossa própria classe de logger usando o código abaixo -

import {Logger} from "typeorm"; 

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

A opção de conexão é especificada em ormconfig.json da seguinte forma -

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