Skip to content

Instantly share code, notes, and snippets.

@KatagiriSo
Created December 13, 2022 09:29
Show Gist options
  • Save KatagiriSo/130a38e950b921a2be106647a1a3ead5 to your computer and use it in GitHub Desktop.
Save KatagiriSo/130a38e950b921a2be106647a1a3ead5 to your computer and use it in GitHub Desktop.
TypeOrmのDataSource周り.md

https://typeorm.io/

typeormのDataSouce周りを調べてみましたのでまとめます。

TypeOrmのDataSource

DataSourceの初期化はDataSourceインスタンスのinitializeメソッドを呼び出して行う。 DataSourceの生成でDBの設定をする。

設定

const AppDataSource = new DataSource({
type:"mysql",
host:"localhost",
port:3300,
username:"hoge",
password:"hoge",
database:"hoge",
})

この設定はDBの種類で異なる。DataSourceOptionsとして型はまとめられている。 このオブジェクトはexportしておいてアプリ全体で共有する。

初期化

初期化

await AppDataSource.initialize().then(() => {
console.log("DB接続成功")
}).catch((err) => {
console.log("DB接続失敗", err)
})

使用

getConnectionで接続を取得できる。

const connection = AppDataSource.getConnection()

DataSourceOptions

共通な設定

  • type: DBの種類
  • extra: DBのDriverに渡すExtraオプション
  • entities: Entityの配列
  • subscribers: Subscriberの配列
  • migrations: Migrationの配列
  • logging: ログを出力するかどうか
  • logger: ログを出力する際のロガーの種類
  • maxQueryExecutionTime: 最大クエリ実行時間 これを越えるとログを出力する
  • poolSize: プールサイズ activeな最大接続数
  • namingStrategy: DBの命名規則
  • entityPrefix: Entityの接頭辞
  • entitySkipConstructor: DBから取得したEntityのコンストラクタを呼び出さない。
  • dropSchema: DBのスキーマをDBの初期化の度に削除する。これは実働環境では使わない。そうしないと全データが消える。
  • synchronize: DBのスキーマをEntityの定義に合わせて自動作成する。これは実働環境では使わない。そうしないと全データが消える。
  • migrationsRun: migrationをアプリの起動毎に自動的に実行する。これを使用せずにmigrationを実行するにはmigration:runを使用する。
  • migrationsTableName: migrationのテーブル名。実行されたmigrationの履歴を保存するテーブル名を指定する。
  • migrationsTransactionMode: migrationの実行時のトランザクションモード。all | none | each でデフォルトはall
  • metadateTableName: metadataのテーブル名。Entityのメタデータを保存するテーブル名を指定する。デフォルトはtypeorm_metadata
  • cache: entityのresult cacheを有効にするかどうか(https://typeorm.io/caching#)
  • cli. entitiesDir: cliでentityを生成する際のディレクトリ
  • cli. subscribersDir: cliでsubscriberを生成する際のディレクトリ

mysqlの設定

  • url
  • host
  • port デフォルトは3306
  • username
  • password
  • database DB名
  • charset 文字コード
  • timezone タイムゾーン JSへのtypecastやDBへの保存時のタイムゾーンを指定する。デフォルトはlocal
  • connectionTimeout 接続タイムアウト ミリ秒 デフォルトは10000
  • aquierTimeout 接続取得タイムアウト TCP接続を取得するまでのタイムアウト。ミリ秒 デフォルトは10000
  • insecureAuth パスワードの暗号化を無効にするかどうか。デフォルトはfalse
  • supportBigNumbers bigintをサポートするかどうか。デフォルトはtrue
  • bigNumberStrings bigintを文字列で受け取るかどうか。デフォルトはtrue
  • dateStrings date(TIMESTAMP, DATETIME, DATE)を文字列で受け取るかどうか。デフォルトはfalse
  • debug デバッグモードを有効にするかどうか。デフォルトはfalse 標準出力にプロトコルの詳細を出力するかどうかのtrue/false、または表示するパケットの種類を配列で指定する。
  • trace Errorのときにスタックトレースを出力するかどうか。デフォルトはtrue。
  • multipleStatements 1クエリで複数のmysql statementを実行するかどうか。デフォルトはfalse。trueの場合はsqlインジェクションの危険性がある。
  • legacySpatialSupport GeomFromTextやAsTextを使用するかどうか。デフォルトはfalse。これらはMySQL 8で削除された。
  • flags https://github.com/mysqljs/mysql#connection-flags
  • ssl ssl パラメータもしくはsslプロファイルの名前を含む文字列を指定する。https://github.com/mysqljs/mysql#ssl-options

複数のDataSourceを使用する場合

DataSourceのインスタンスを複数作成すれば良い。

複数のDBを一つのDataSourceで使用する場合

Entityのデコレータに@Entity({ database: 'db1' })のようにdatabaseを指定する。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment