создание миграций для 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. Так что, возможно, кто-нибудь сможет помочь или столкнулся с таким же случаем.