【问题标题】:NestJS TypeOrmModule repository injection seems not working properlyNestJS TypeOrmModule 存储库注入似乎无法正常工作
【发布时间】:2022-01-07 01:41:23
【问题描述】:

我正在尝试将用户存储库注入到 UserService,但似乎没有建立 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: Repository<User>,
  ) {}

  ...
}

user.module.ts


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

app.module.ts


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

【问题讨论】:

  • 你是否安装了typeorm模块的所有依赖:npm install --save @nestjs/typeorm typeorm pg
  • 是的,一切都已安装。其版本分别为:8.0.2、0.2.41、8.7.1
  • 向我们展示所有出现的UserRepository。看起来您已将其添加到 providers 数组中,但您不应该这样做
  • UserRepository 仅出现在我上面发布的 user.service.ts 中。 UserService 是唯一注入 UserRepository 的地方。而 TypeOrmModule.forFeature 仅用于嵌套模块中的导入数组。

标签: typescript nestjs typeorm


【解决方案1】:

对于遇到此问题的人,只需尝试 TypeOrmModule.forRootAsync()

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

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2012-05-06
    • 2013-02-17
    • 2017-10-09
    • 2017-08-03
    • 2014-05-02
    • 2011-09-11
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多