12

I have two .env files like dev.env and staging.env. I am using typeorm as my database ORM. I would like to know how to let typeorm read either of the config file whenever I run the application. Error: No connection options were found in any of configurations file from typeormmodule.

Kim Kern
  • 54,283
  • 17
  • 197
  • 195
Arsene
  • 1,037
  • 4
  • 20
  • 47

1 Answers1

16

You can create a ConfigService that reads in the file corresponding to the environment variable NODE_ENV:

1) Set the NODE_ENV variable in your start scripts:

"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) Read the corresponding .env file in the ConfigService

@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) Use the ConfigService to set up your database connection:

TypeOrmModule.forRootAsync({
  imports:[ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    type: configService.getDatabase()
    // ...
  }),
  inject: [ConfigService]
}),
Kim Kern
  • 54,283
  • 17
  • 197
  • 195
  • 1
    in this approach you will need second configuration file in order to use typeorm CLI – grexlort Apr 22 '19 at 16:06
  • Did you put this in the app.module.ts? I am getting errors saying `Error: No connection options were found in any of configurations file.`. – rhlsthrm Jun 17 '19 at 14:01
  • 1
    @rhlsthrm Yes, in `app.module.ts`. I haven't had an error like this, would need to look at this in more detail. If you can't solve it, maybe open a new question for it. :-) – Kim Kern Jun 17 '19 at 14:16
  • @KimKern, thanks for the response. I opened a new question. – rhlsthrm Jun 17 '19 at 15:05
  • @grexlort is right, you will need a default export config file to use TypeORM CLI managing your migration for example. But this could be imported in your ConfigService as an exception or you can be generic and import them this way – Vincent Nov 16 '19 at 13:49