NestJs TypeORM configuration using env files

13,502

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]
}),
Share:
13,502

Related videos on Youtube

Arsene
Author by

Arsene

Software developer with required experience analyzing, designing, coding, testing, supporting next-generation software and web applications, administering and monitoring computer-based systems and networks. I am an accurate, dynamic and energetic developer, with a keen eye for detail and I should be very grateful for the opportunity to learn more. I am able to take on the responsibility of this position immediately, and have the enthusiasm and determination to ensure that I make a success of it.

Updated on June 04, 2022

Comments

  • Arsene
    Arsene almost 2 years

    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.

  • grexlort
    grexlort about 5 years
    in this approach you will need second configuration file in order to use typeorm CLI
  • rhlsthrm
    rhlsthrm almost 5 years
    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..
  • Kim Kern
    Kim Kern almost 5 years
    @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. :-)
  • rhlsthrm
    rhlsthrm almost 5 years
    @KimKern, thanks for the response. I opened a new question.
  • Vincent
    Vincent over 4 years
    @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