Nest.js 无法解析依赖关系

Nest.js can't resolve dependencies

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

Error: Nest can't resolve dependencies of the UsersService (UserRepository, HttpService, ?). Please make sure that the argument ConfigService at index [2] is available in the UsersModule context.

可能的解决方案:

我已经在我的 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,
  ) {}

}

你有点不对劲(我刚开始也经历过同样的痛苦)。 最佳做法是创建自定义存储库来处理数据库逻辑。

先声明一个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 {}

您仍然需要在 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 {}

希望这对您有所帮助。

谢谢。