0

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

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

潜在的解决方案:

  • 如果 ConfigService 是提供者,它是当前 UsersModule 的一部分吗?
  • 如果 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,
  ) {}

}
4

2 回答 2

3

您仍然需要在users.module.ts. 参考下面的例子。

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 {}

希望这可以帮助。

谢谢。

于 2020-02-13T13:52:56.143 回答
2

你的事情有点过了(我一开始也经历了同样的痛苦)。最佳实践是创建一个自定义存储库来处理数据库逻辑。

首先声明一个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 {}
于 2020-02-12T10:20:03.247 回答