Saltar al contenido

NestJS + TypeORM: ¿Usar dos o más bases de datos?

Ya no busques más por otros sitios porque estás al sitio exacto, contamos con la respuesta que quieres encontrar pero sin problema.

Solución:

Acabo de intentar configurar TypeORM con múltiples bases de datos y un ormconfig.json y no me funcionó para nada. Parecía usar siempre el default conexión y cuando no se encontró una conexión predeterminada (= sin nombre explícito), arrojó el error correspondiente.

Sin embargo, funcionó cuando definí las conexiones en el app.module.ts en cambio (he quitado ormconfig.json):

imports: [
  ...,
  TypeOrmModule.forRoot(
    name: 'Project1',
    type: 'mysql',
    host: 'localhost',
    port: 3306,
    username: '',
    password: '',
    database: '',
    synchronize: false,
    entities: ['project1/*.entity.ts'],
    subscribers: ['project1/*.subscriber.ts'],
    migrations: ['project1/migrations/*.ts'],
    cli:  migrationsDir: 'project1/migrations' ,
  ),
  TypeOrmModule.forRoot(
    name: 'project2',
    type: 'mysql',
    host: 'localhost',
    port: 3306,
    username: '',
    password: '',
    database: '',
    synchronize: false,
    entities: ['project2/*.entity.ts'],
    subscribers: ['project2/*.subscriber.ts'],
    migrations: ['project2/migrations/*.ts'],
    cli:  migrationsDir: 'project2/migrations' ,
  )
]

Debe pasar explícitamente el nombre de la conexión al mismo nivel dentro TypeOrmModule.forRoot( nombre: ‘db1Connection’ ) en caso de que esté utilizando varias conexiones de base de datos.

TypeOrmModule.forRootAsync(
  name: DB1_CONNECTION,
  imports: [ConfigModule],
  useClass: TypeormDb1ConfigService,
),

TypeOrmModule.forRootAsync(
  name: DB2_CONNECTION,
  imports: [ConfigModule],
  useClass: TypeormDb2ConfigService,
)

Para mayor claridad y para que otros desarrolladores vengan a esta publicación:

De la documentación de NestJS:

Si no establece ningún nombre para una conexión, su nombre se establece como predeterminado. Tenga en cuenta que no debe tener varias conexiones sin un nombre o con el mismo nombre, de lo contrario, simplemente se anularán.

Una de sus conexiones debe tener uno de los siguientes:

  1. "name":"default"
  2. Sin ningún nombre.

Recomendaría declarar todas sus conexiones en ormconfig.json y no declararlo en código.

Un ejemplo para importar las conexiones desde ormconfig.json:

@Module(
    imports: [TypeOrmModule.forFeature([Entity1, Entity2]), //This will use default connection
    TypeOrmModule.forRoot(name: 'con1'), // This will register globaly con1
    TypeOrmModule.forRoot(name: 'con2'), // This will register globaly con2
    controllers: [...],
    providers: [...],
    exports: [...]
)

en su módulo (no tiene que ser el módulo raíz, solo los módulos necesitarán las conexiones).

Calificaciones y reseñas

Recuerda dar visibilidad a esta sección si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *