dev.env
とstaging.env
のような2つの.envファイルがあります。データベースORMとしてtypeormを使用しています。アプリケーションを実行するたびに、typeormにいずれかの構成ファイルを読み取らせる方法を知りたいです。 typeormmoduleからのError: No connection options were found in any of configurations file
。
環境変数NODE_ENV
に対応するファイルを読み込む ConfigService を作成できます。
1)開始スクリプトでNODE_ENV
変数を設定します。
"start:dev": "cross-env NODE_ENV=dev ts-node -r tsconfig-paths/register src/main.ts",
"start:staging": "cross-env NODE_ENV=staging node dist/src/main.js",
2)ConfigServiceで対応する.envファイルを読み取ります
@Injectable()
export class ConfigService {
private readonly envConfig: EnvConfig;
constructor() {
this.envConfig = dotenv.parse(fs.readFileSync(`${process.env.NODE_ENV}.env`));
}
get databaseHost(): string {
return this.envConfig.DATABASE_Host;
}
}
3)ConfigService
を使用して、データベース接続を設定します。
TypeOrmModule.forRootAsync({
imports:[ConfigModule],
useFactory: async (configService: ConfigService) => ({
type: configService.getDatabase()
// ...
}),
inject: [ConfigService]
}),