In a NestJS and TypeORM application, I want to create two database connections: development and test.
In TypeORM's document, it can define multiple blocks:
https://orkhan.gitbook.io/typeorm/docs/using-ormconfig#using-ormconfig.json
[{
"name": "default",
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test"
}, {
"name": "second-connection",
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test"
}]
In NestJS' document, it can get different env files to load into app:
https://docs.nestjs.com/techniques/configuration#custom-env-file-path
ConfigModule.forRoot({
envFilePath: ['.env.development.local', '.env.development'],
});
In app's current connection file,
import { ConfigModule, ConfigService } from '@nestjs/config';
import config from '../config';
@Module({
imports: [
ConfigModule.forRoot({
load: [config],
isGlobal: true,
}),
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
...configService.get('db'),
entities: Entities,
}),
}),
ContactModule,
],
providers: [],
})
config.ts
export default (): Record<string, any> => ({
NODE_ENV: process.env.NODE_ENV,
PORT: process.env.PORT || 3000,
db: {
type: 'mysql',
name: 'default',
host: process.env.DB_HOST,
port: process.env.PORT || 3307,
username: process.env.DB_USER,
database: process.env.DB_NAME,
schema: process.env.schema,
synchronize: false,
migrations: ['src/database/migration/**/*.ts'],
},
});
ormconfig.ts
module.exports = [
{
type: 'mysql',
name: 'default',
host: process.env.DB_HOST,
port: process.env.PORT || 3307,
username: process.env.DB_USER,
database: process.env.DB_NAME,
schema: process.env.schema,
synchronize: true,
},
{
type: 'mysql',
name: 'development',
host: process.env.DB_HOST,
port: process.env.PORT || 3307,
username: process.env.DB_USER,
database: process.env.DB_NAME,
schema: process.env.schema,
synchronize: false,
},
{ // To Add
type: 'mysql',
name: 'test',
host: process.env.DB_HOST,
port: process.env.PORT || 3307,
username: process.env.DB_USER,
database: process.env.DB_NAME,
schema: process.env.schema,
synchronize: true,
}
Which is the best way? Is it good to define different db connection infos in config.ts or add a test target into the ormconfig.ts to easy to set?