typescript NestJS TypeOrmModule存储库注入似乎无法正常工作

5vf7fwbs  于 2023-05-08  发布在  TypeScript
关注(0)|答案(3)|浏览(223)

我试图注入用户存储库到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 {}
rlcwz9us

rlcwz9us1#

对于正在努力解决这个问题的人,可以尝试TypeOrmModule.forRootAsync()

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

toe950272#

解决了谢谢约瑟夫·黄
TypeOrmModule.forRootAsync({ useFactory:()=>({ type:'postgres',...,synchronize:process.env.NODE_ENV!== 'prod',记录:process.env.NODE_ENV!== 'prod' && process.env.NODE_ENV!== 'test',}),})

qyzbxkaa

qyzbxkaa3#

当你添加实体装饰器时,它不会自动添加到你的数据源中。
你总是应该传递实体列表或实体路径到dataSource。
简单的解决方案,当你有一个数据库连接工作。

import { getMetadataArgsStorage } from 'typeorm';
TypeOrmModule.forRootAsync({
  useFactory: () => ({
  ...databaseOptions,
  entities: getMetadataArgsStorage().tables.map((table) => table.target),
})

相关问题