Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 410
Arsene Avatar asked Jan 25 '19 08:01

Arsene


People also ask

How does NestJS connect to multiple databases?

Use Secondary DB Connection As we did for the main connection and the Customer entity we need to import TypeOrm into the AccessLog module, but this time we will also need to pass a connection name to the TypeOrmModule. forFeature([Entities, ...], connectionName) method.

What ORM does NestJS use?

Nest uses TypeORM because it's the most mature Object Relational Mapper (ORM) available for TypeScript. Since it's written in TypeScript, it integrates well with the Nest framework. To begin using it, we first install the required dependencies.


1 Answers

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]
}),
like image 150
Kim Kern Avatar answered Sep 18 '22 20:09

Kim Kern