I'm trying to generate migrations with multiple databases using typeORM 0.3.7 and NestJS but when I run the command:
npx typeorm migration:generate ./src/migrations
It throws me an error "Missing required argument: dataSource". I saw, I should create a file with all my datasources but I don't know how to use them in my database.module.
This is my code:
database.module.ts
@Module({
imports: [
TypeOrmModule.forRootAsync({
name: databaseNames.admin,
inject: [config.KEY],
useFactory: (
configService: ConfigType<typeof config>,
): TypeOrmModuleOptions => {
const { admin, host, username, password, port } =
configService.mysqlDatabases;
return {
type: `mysql`,
name: admin.name,
database: admin.name,
host,
username,
password,
port: port,
entities: [User],
migrations: [__dirname + '/../migrations/*{.ts,.js}'],
extra: {
charset: 'utf8mb4_unicode_ci',
},
};
},
}),
TypeOrmModule.forRootAsync({
name: databaseNames.casamoto,
inject: [config.KEY],
useFactory: (configService: ConfigType<typeof config>) => {
const { casamoto, host, username, password, port } =
configService.mysqlDatabases;
return {
type: `mysql`,
database: casamoto.name,
host,
username,
password,
port: port,
entities: [Client, Product, Stock, Order, OrderDetail, Invoice],
synchronize: false,
};
},
}),
],
})
export class DatabaseModule {}
config.ts
import { registerAs } from '@nestjs/config';
export enum databaseNames {
admin = 'admin',
casamoto = 'casamoto',
maruyama = 'maruyama',
}
export default registerAs('config', () => {
return {
port: +process.env.PORT,
mysqlDatabases: {
host: process.env.MYSQL_HOST,
port: +process.env.MYSQL_PORT,
username: process.env.MYSQL_USERNAME,
password: process.env.MYSQL_PASSWORD,
admin: {
name: process.env.ADMIN_DATABASE,
},
casamoto: {
name: process.env.CASAMOTO_DATABASE,
},
},
};
});