Search code examples
javascriptnode.jstypescriptnestjstypeorm

NestJs TypeORM configuration using env files


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.


Solution

  • 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]
    }),