问题
I am trying to use ConfigService
in my users.module.ts
but I am getting an
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.
Potential solutions:
- If ConfigService is a provider, is it part of the current UsersModule?
- If ConfigService is exported from a separate @Module, is that module imported within UsersModule?
I have imported the ConfigModule in my UsersModule but still its not working :(
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,
) {}
}
回答1:
You would still have to declare ConfigService in the providers of users.module.ts
. Refer example below.
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 {}
Hope this helps.
Thanks.
回答2:
You got things kinda crossed (I went through the same pain starting out too). Best practice would be to create a custom repository to handle the database logic.
First declare a UserRepository
:
@EntityRepository(User)
export class UserRepository extends Repository<User> {
// add your custom db related method here later..
}
Then in your AppModule
you need to declare your entities like so:
@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
]
})
...
And then in your UsersModule
declare your repository:
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule, HttpModule, TypeOrmModule.forFeature([UserRepository])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
来源:https://stackoverflow.com/questions/60182039/nest-js-cant-resolve-dependencies