title: NestJS setup TypeOrm connection with .env and @nestjs/config
body: <p>I'm trying to find the most legal way to set up NestJS database using .env file. That is I want to use <code>@nestjs/config</code> package for importing .env variables and use them in the TypeOrmModule.</p>
  <p>It seems I need to use <code>TypeOrmModule.forRootAsync</code>.</p>
  <p>I'm trying to do it like that:</p>
  <pre><code>// app.module.ts
  
  @Module({
    imports: [
      ConfigModule.forRoot({
        isGlobal: true,
      }),
      TypeOrmModule.forRootAsync({
        useClass: TypeOrmConfigService,
      }),
      ...
    ],
  
  })
  export class AppModule {}
  </code></pre>
  <p>Then, there's <code>TypeOrmConfigService</code>:</p>
  <pre><code>import { Module } from '@nestjs/common';
  import { ConfigModule, ConfigService } from '@nestjs/config';
  import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm';
  
  @Module({
    imports: [ConfigModule],
  })
  export class TypeOrmConfigService implements TypeOrmOptionsFactory {
    constructor(private configService: ConfigService) {}
  
    createTypeOrmOptions(): TypeOrmModuleOptions {
      return {
        type: 'mysql',
        host: this.configService.get('DATABASE_HOST'),
        username: this.configService.get('DATABASE_USERNAME'),
        password: this.configService.get('DATABASE_PASSWORD'),
      };
    }
  }
  </code></pre>
  <p>The last one is incorrect: <code>Nest can't resolve dependencies of the TypeOrmConfigService (?). Please make sure that the argument at index [0] is available in the TypeOrmCoreModule context.</code></p>
  <p>How to fix it?
  Or (the most preferred) is there anywhere an example of NestJs + TypeOrm + @nestjs/config + .env (outside of the repo, with DATABASE_PASSWORD) + config (I mean npm package config that processes config/development.yml, config/production.yml etc.)?</p>
  <p>It seems that I'm looking for a very standard thing, the hello world, that should be a start of every NestJS project, but I found difficulties combining @nestjs/config and TypeOrm.</p>
  <p>Upd. If I replace <code>@Module</code> with <code>@Injectable</code>, the error is exactly the same:</p>
  <pre><code>yarn run v1.22.4
  $ NODE_ENV=development nodemon
  [nodemon] 1.19.0
  [nodemon] to restart at any time, enter `rs`
  [nodemon] watching: /home/kasheftin/work/pubngn4/nestjs-course-task-management/src/**/*
  [nodemon] starting `ts-node -r tsconfig-paths/register src/main.ts`
  [Nest] 25384   - 09/01/2020, 8:07 PM   [NestFactory] Starting Nest application...
  [Nest] 25384   - 09/01/2020, 8:07 PM   [InstanceLoader] AppModule dependencies initialized +11ms
  [Nest] 25384   - 09/01/2020, 8:07 PM   [InstanceLoader] TypeOrmModule dependencies initialized +0ms
  [Nest] 25384   - 09/01/2020, 8:07 PM   [InstanceLoader] PassportModule dependencies initialized +0ms
  [Nest] 25384   - 09/01/2020, 8:07 PM   [ExceptionHandler] Nest can't resolve dependencies of the TypeOrmConfigService (?). Please make sure that the argument at index [0] is available in the TypeOrmCoreModule context. +1ms
  Error: Nest can't resolve dependencies of the TypeOrmConfigService (?). Please make sure that the argument at index [0] is available in the TypeOrmCoreModule context.
      at Injector.lookupComponentInExports (/home/kasheftin/work/pubngn4/nestjs-course-task-management/node_modules/@nestjs/core/injector/injector.js:180:19)
      at processTicksAndRejections (internal/process/task_queues.js:97:5)
      at Injector.resolveComponentInstance (/home/kasheftin/work/pubngn4/nestjs-course-task-management/node_modules/@nestjs/core/injector/injector.js:143:33)
      at resolveParam (/home/kasheftin/work/pubngn4/nestjs-course-task-management/node_modules/@nestjs/core/injector/injector.js:96:38)
      at async Promise.all (index 0)
      at Injector.resolveConstructorParams (/home/kasheftin/work/pubngn4/nestjs-course-task-management/node_modules/@nestjs/core/injector/injector.js:112:27)
      at Injector.loadInstance (/home/kasheftin/work/pubngn4/nestjs-course-task-management/node_modules/@nestjs/core/injector/injector.js:78:9)
      at Injector.loadProvider (/home/kasheftin/work/pubngn4/nestjs-course-task-management/node_modules/@nestjs/core/injector/injector.js:35:9)
      at async Promise.all (index 3)
      at InstanceLoader.createInstancesOfProviders (/home/kasheftin/work/pubngn4/nestjs-course-task-management/node_modules/@nestjs/core/injector/instance-loader.js:41:9)
   1: 0xa2afd0 node::Abort() [/home/kasheftin/.nvm/versions/node/v14.3.0/bin/node]
   2: 0xa9e7a9  [/home/kasheftin/.nvm/versions/node/v14.3.0/bin/node]
   3: 0xc06bab  [/home/kasheftin/.nvm/versions/node/v14.3.0/bin/node]
   4: 0xc08156  [/home/kasheftin/.nvm/versions/node/v14.3.0/bin/node]
   5: 0xc087d6 v8::internal::Builtin_HandleApiCall(int, unsigned long*, v8::internal::Isolate*) [/home/kasheftin/.nvm/versions/node/v14.3.0/bin/node]
   6: 0x13a9f19  [/home/kasheftin/.nvm/versions/node/v14.3.0/bin/node]
  Aborted (core dumped)
  [nodemon] app crashed - waiting for file changes before starting...
  </code></pre>