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.
Asked
Active
Viewed 1.8k times
12
1 Answers
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
-
1in 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