TypeORM-エンティティリスナーとログ

エンティティリスナーは、カスタムメソッドをサポートし、特定のイベントをリッスンするエンティティで使用されます。デコレータを使用して、任意のエンティティカスタムメソッドを定義できます。デコレータについて簡単に理解しましょう。

  • @AfterLoad − QueryBuilderまたはリポジトリ/マネージャを使用してエンティティがロードされると、このメソッドが呼び出されます。
  • @BeforeInsert −このメソッドは、リポジトリ/マネージャを使用してエンティティが挿入される前に呼び出します。
  • @AfterInsert −このメソッドは、リポジトリ/マネージャを使用してエンティティが挿入された後に呼び出されます。
  • @BeforeUpdate −このメソッドは、リポジトリ/マネージャーを使用して既存のエンティティが更新される前に呼び出します。
  • @AfterUpdate −エンティティが更新された後に呼び出します。
  • @BeforeRemove −エンティティが削除される前に呼び出します。
  • @AfterRemove −エンティティが削除された後に呼び出します。

サブスクライバー

サブスクライバーは、特定のエンティティイベントをリッスンするために使用されます。それはから実装されますEntitySubscriberInterface。サブスクライバーでエンティティリスナーを使用する方法の簡単な例を理解しましょう。Studentエンティティが以下に示されていると考えてください-

Student.ts

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.

ここでファイルに移動すると、以下のコーディングが表示されます-

StudentSubscriber.ts

import {EventSubscriber, EntitySubscriberInterface} from "typeorm"; 

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

ここで、ファイルに次の変更を追加します。

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

ここに、

使用しました afterInsert()エンティティイベントを呼び出すメソッド。同様に、他のイベントも使用できます。ormconfig.jsonファイルはすでに構成されています。ここで、以下の変更をに追加しますindex.ts 次のようにファイル-

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}を追加すると、ロギングが有効になります。ロギングオプションは、さまざまなタイプに分類されます。それらは次のとおりです-

query−すべてのログクエリを返します。それは以下のように定義されます-

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

error−失敗したすべてのクエリとエラーのログを返します。以下に定義されています-

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

schema −スキーマのログを返します。

warn −内部ORM警告を返します。

info −内部ORM情報メッセージをログに返します。

log −内部ORMログメッセージを返します。

カスタムロガー

カスタムロギングはシンプルで高度にカスタマイズ可能なロギングオプションです。以下のコードを使用して、独自のロガークラスを作成できます-

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