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.
可能的解决方案:
- 如果 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,
) {}
}
你有点不对劲(我刚开始也经历过同样的痛苦)。
最佳做法是创建自定义存储库来处理数据库逻辑。
先声明一个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 {}
希望这对您有所帮助。
谢谢。
我正在尝试在我的 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.
可能的解决方案:
- 如果 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,
) {}
}
你有点不对劲(我刚开始也经历过同样的痛苦)。 最佳做法是创建自定义存储库来处理数据库逻辑。
先声明一个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 {}
希望这对您有所帮助。
谢谢。