環境変数化とDB接続のモジュール化

綺麗にって漠然と書いたが、

  • 環境変数化
  • DB接続のモジュール作成

を行っていく。

DB接続のモジュール作成

まずは外部モジュール化する。

nest g mo database

で、データ接続用のモジュールを作成する。

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
    imports: [
        TypeOrmModule.forRootAsync({
                useFactory: () => ({
                type: 'mysql',
                host: 'localhost',
                port: 3306,
                username: 'username',
                password: 'password',
                database: 'database-name',
                entities: [],
                synchronize: true,
            }),
        }),
    ],
})
export class DatabaseModule { }

次に、app.module.tsの方を編集する。

@Module({
  imports: [
    DatabaseModule,
  ],

設定をべたでimportしていたので、それを外部モジュールに変換する。

これで外部化は完了。

環境変数化

次に環境変数化していく。

npm install @nestjs/config

で、環境変数から読み込むためのパッケージをインストールする。

バージョンは "@nestjs/config": "^2.3.1"だった。

.envファイルをルートに作成し、そこに環境変数を作成する。

DATABASE_USER=test
DATABASE_PASSWORD=test

DatabaseModuleの読み込みを環境変数に変更する。

@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      imports: [
        ConfigModule.forRoot({
          envFilePath: [".env"],
        }),
      ],
      useFactory: () => ({
        type: 'mysql',
        host: process.env.DATABASE_HOST,
        port: Number(process.env.DATABASE_PORT),
        username: process.env.DATABASE_USER,
        password: process.env.DATABASE_PASSWORD,
        database: process.env.DATABASE_NAME,
        entities: [Sample],
        synchronize: true,
      }),
    }),
  ],
})

これでいままで通りデータが取得できていれば問題ない。