Инъекция репозитория NestJS TypeОрмМодуля, похоже, работает неправильно

#typescript #nestjs #typeorm

Вопрос:

Я пытаюсь внедрить репозиторий пользователей в службу поддержки пользователей, но, похоже, соединение typeorm не устанавливается. Я погуглил об этой ошибке, но, похоже, ресурсов не так много.

Вот журнал ошибок

 [Nest] 18226 - 2021. 11. 30. 오후 7:10:19 ERROR [ExceptionHandler]  Nest can't resolve dependencies of the UserRepository (?).  Please make sure that the argument Connection at index [0] is available  in the TypeOrmModule context.  Potential solutions: - If Connection is a provider, is it part of the current TypeOrmModule? - If Connection is exported from a separate @Module, is that module imported within TypeOrmModule?  @Module({  imports: [ /* the Module containing Connection */ ]  })  

Вот коды

user.service.ts

  @Injectable() export class UserService {  constructor(  @InjectRepository(User) private readonly user: Repositorylt;Usergt;,  ) {}   ... }  

user.module.ts

  @Module({  imports: [TypeOrmModule.forFeature([User])],  providers: [UserService],  exports: [UserService],  controllers: [UserController], }) export class UserModule {}   

приложение.модуль.ts

  @Module({  imports: [  ConfigModule.forRoot({  ...  }),  TypeOrmModule.forRoot({  type: 'postgres',  ...,  synchronize: process.env.NODE_ENV !== 'prod',  logging:  process.env.NODE_ENV !== 'prod' amp;amp; process.env.NODE_ENV !== 'test',  entities: [User, Wiki],  }),  MongooseModule.forRoot(process.env.MONGODB_ROOT),  UserModule,  WikiModule,  ],  controllers: [],  providers: [], }) export class AppModule {}   

Комментарии:

1. Вы установили все зависимости модуля typeorm: npm install --save @nestjs/typeorm typeorm pg ?

2. Да, все установлено. Его версии: 8.0.2, 0.2.41, 8.7.1 соответственно

3. покажите нам все случаи UserRepository . Похоже, вы добавили его в providers массив, но вам не следует этого делать

4. Информация о пользователе появляется только в файле user.service.ts, который я опубликовал выше. UserService — единственное место, где вводится UserRepository. И TypeOrmModule.forFeature используется только при импорте массива в гнездовых модулях.

Ответ №1:

Для тех, кто борется с этой проблемой, просто попробуйте TypeOrmModule.forRootAsync()

 TypeOrmModule.forRootAsync({  useFactory: () =gt; ({  type: 'postgres',  ...,  synchronize: process.env.NODE_ENV !== 'prod',  logging:  process.env.NODE_ENV !== 'prod' amp;amp; process.env.NODE_ENV !== 'test',  }), })