Nest.js无法解析依赖关系

时间:2020-02-12 06:00:43

标签: typescript nestjs nestjs-config

我正在尝试在ConfigService中使用users.module.ts,但是我得到了

错误:Nest无法解析UsersService的依赖关系(UserRepository,HttpService 、?)。请确保在用户模块上下文中索引[2]处的参数ConfigService可用。

可能的解决方案:

  • 如果ConfigService是提供者,它是否是当前的一部分 用户模块?
  • 如果ConfigService是从单独的@Module导出的,则为 该模块导入了UsersModule中?

我已经在我的UsersModule中导入了ConfigModule,但是仍然无法正常工作:(

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      expandVariables: true,
    }),
    TypeOrmModule.forRoot(),
    UsersModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

users.module.ts

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([User])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService],
})

export class UsersModule {}

users.service.ts

export class UsersService {

 constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository<User>,
    private readonly httpService: HttpService,
    private readonly configService: ConfigService,
  ) {}

}

2 个答案:

答案 0 :(得分:0)

您遇到了一些麻烦(我也经历了同样的痛苦)。 最佳做法是创建一个自定义存储库来处理数据库逻辑。

首先声明一个UserRepository

@EntityRepository(User)
export class UserRepository extends Repository<User> {

    // add your custom db related method here later..

}

然后在您的AppModule中,您需要这样声明实体:

@Module({

    imports: [

        TypeOrmModule.forRoot({

            type: 'mysql',
            host: process.env.DB_HOSTNAME || 'localhost',
            port: Number.parseInt(process.env.DB_PORT) || 3306,
            username: process.env.DB_USERNAME || 'root',
            password: process.env.DB_PASSWORD || 'mysql',
            database: process.env.DB_NAME || 'nestjs',
            synchronize: process.env.DB_SYNCHRONIZE === 'true' || true,
            keepConnectionAlive: true,
            entities: [

                User

            ]

        })

...

然后在您的UsersModule中声明您的存储库:

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService],
})

export class UsersModule {}

答案 1 :(得分:0)

您仍然必须在users.module.ts的提供程序中声明ConfigService。请参阅下面的示例。

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      expandVariables: true,
    }),
    TypeOrmModule.forRoot(),
    UsersModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

users.module.ts

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
  controllers: [UsersController],
  providers: [UsersService, ConfigService],
  exports: [UsersService],
})

export class UsersModule {}

希望这会有所帮助。

谢谢。