создание миграций для NestJS с помощью Mikro-orm и ошибки монорепозитория NX: MetadataError: объекты не обнаружены

Я попытался настроить mikroORM в своем моно-репо-проекте и столкнулся с основной проблемой. Это соответствует идее с одним package.json. Других способов подключения микросервисов к БД я не нашел. Поэтому я создал в соединителе БД lib с реестром динамических модулей, например:

      export class DbConnectorModule {
  static register(config: Options<PostgreSqlDriver>): DynamicModule {
    return {
      module: DbConnectorModule,
      imports: [
        ConfigModule.forRoot({ isGlobal: true }),
        MikroOrmModule.forRootAsync({
          useFactory: () => ({
            ...config
          }),
          inject: [ConfigService],
        } as MikroOrmModuleAsyncOptions),
      ],
      exports: [MikroOrmModule],
    };
  }
}

затем в моем микросервисе в корневом каталоге я добавил mikro-orm.config.ts:

      const mikroOrmConfig: Options<PostgreSqlDriver> = {
  baseDir: join(__dirname, '..'),
  type: 'postgresql',
  allowGlobalContext: true,
  host: process.env.DATABASE_HOST,
  port: +process.env.DATABASE_PORT,
  dbName: process.env.DATABASE_NAME,
  user: process.env.DATABASE_USER,
  password: process.env.DATABASE_PASSWORD,
  entities: ['./dist/domains/**/entities/*.entity.js'],
  entitiesTs: ['./src/domains/**/entities/*.entity.ts'],
  highlighter: new SqlHighlighter(),
  debug: true,
  migrations: {
    tableName: 'migrations',
    path: './dist/migrations',
    pathTs: './src/migrations',
    glob: '!(*.d).{js,ts}',
    emit: 'ts',
    snapshot: false,
    generator: TSMigrationGenerator,
  },

};

Итак, идея состоит в том, что каждый микросервис будет иметь свой независимый реестр конфигураций и модулей, например:

      @Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: './apps/open-banking/.env',
      validationSchema: Joi.object(
        {
          POSTGRES_URI: Joi.string().required(),
          SALTEDGE_APP_ID: Joi.string().required(),
          SALTEDGE_APP_SECRET: Joi.string().required(),
          SALTEDGE_REDIRECT_LINK: Joi.string().required(),
          DATABASE_HOST: Joi.string().required(),
          DATABASE_PORT: Joi.string().required(),
          DATABASE_NAME: Joi.string().required(),
          DATABASE_USER: Joi.string().required(),
          DATABASE_PASSWORD: Joi.string().required()
        }
      )
    }),
    HealthCheckModule.register(),
    DbConnectorModule.register(mikroOrmConfig)
  ],
  controllers: [],
  providers: []
})

но в результате я получаю сообщение об ошибке, что моя конфигурация не может найти никаких объектов, когда я пытаюсь запустить микросервис или запустить init для миграции.

      [Nest] 4599  - 06/05/2023, 11:31:26 AM   ERROR [ExceptionHandler] No entities were discovered ```

Когда я временно вставил файл конфигурации дляentitiesиentitiesTsкласс объекта, ошибка исчезла:

      entities: [ProfileEntity],
  entitiesTs: [ProfileEntity]

Но в любом случае это не работает для запуска миграции через CLI. Так что, возможно, кто-нибудь сможет помочь или столкнулся с таким же случаем.

0 ответов

Другие вопросы по тегам