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