Javascript 雀巢公司可以';无法解析导入模块的依赖关系
我有四个模块,App->Dog->Access->Mongo(依赖项如箭头所示)。 在应用程序中,MongoDB还与Javascript 雀巢公司可以';无法解析导入模块的依赖关系,javascript,typescript,nestjs,Javascript,Typescript,Nestjs,我有四个模块,App->Dog->Access->Mongo(依赖项如箭头所示)。 在应用程序中,MongoDB还与MongooseModule.forRootAsync()连接,然后将其与MongooseModule.forFeature()一起用于MongoModule。 完整的代码可以在这里找到 我想使用通过AccessModule提供的AccessGuard(内部使用MongoModule)在DogModule中提供 使用下面的代码,我会收到此错误消息: [Nest] 31164 -
MongooseModule.forRootAsync()
连接,然后将其与MongooseModule.forFeature()一起用于MongoModule
。
完整的代码可以在这里找到
我想使用通过AccessModule
提供的AccessGuard
(内部使用MongoModule
)在DogModule
中提供
使用下面的代码,我会收到此错误消息:
[Nest] 31164 - 11/10/2020, 5:11:29 PM [ExceptionHandler] Nest can't resolve dependencies of the AccessGuard (?). Please make sure that the argument Mongo at index [0] is available in the DogModule context.
Potential solutions:
- If Mongo is a provider, is it part of the current DogModule?
- If Mongo is exported from a separate @Module, is that module imported within DogModule?
@Module({
imports: [ /* the Module containing Mongo */ ]
})
app.module.ts:
@Module({
imports: [
MongooseModule.forRootAsync({
useFactory: async () => {
let info = mongod.getInstanceInfo()
if (!info) {
await mongod.start()
}
info = mongod.getInstanceInfo()
if (info) {
return {
uri: info.uri,
dbName: "dogsDB",
useCreateIndex: true,
promiseLibrary: global.Promise,
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
} as MongooseModuleOptions
}
},
}),
DogModule,
],
})
export class AppModule {}
@Module({
imports: [AccessModule],
providers: [AccessGuard],
controllers: [DogController],
})
export class DogModule {}
@Module({
imports: [MongoModule],
providers: [AccessGuard],
exports: [AccessGuard],
})
export class AccessModule {}
dog.module.ts:
@Module({
imports: [
MongooseModule.forRootAsync({
useFactory: async () => {
let info = mongod.getInstanceInfo()
if (!info) {
await mongod.start()
}
info = mongod.getInstanceInfo()
if (info) {
return {
uri: info.uri,
dbName: "dogsDB",
useCreateIndex: true,
promiseLibrary: global.Promise,
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
} as MongooseModuleOptions
}
},
}),
DogModule,
],
})
export class AppModule {}
@Module({
imports: [AccessModule],
providers: [AccessGuard],
controllers: [DogController],
})
export class DogModule {}
@Module({
imports: [MongoModule],
providers: [AccessGuard],
exports: [AccessGuard],
})
export class AccessModule {}
access.module.ts:
@Module({
imports: [
MongooseModule.forRootAsync({
useFactory: async () => {
let info = mongod.getInstanceInfo()
if (!info) {
await mongod.start()
}
info = mongod.getInstanceInfo()
if (info) {
return {
uri: info.uri,
dbName: "dogsDB",
useCreateIndex: true,
promiseLibrary: global.Promise,
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
} as MongooseModuleOptions
}
},
}),
DogModule,
],
})
export class AppModule {}
@Module({
imports: [AccessModule],
providers: [AccessGuard],
controllers: [DogController],
})
export class DogModule {}
@Module({
imports: [MongoModule],
providers: [AccessGuard],
exports: [AccessGuard],
})
export class AccessModule {}
access.guard.ts:
@Injectable()
export class AccessGuard implements CanActivate {
constructor(private mongo: Mongo) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
return await this.mongo.hasDog()
}
}
当我将MongoModule
添加到DogModule
时,它会工作。
然而,我想这不是应该的,因为DogModule实际上没有使用Mongo
类。
DogModule
只需要AccessModule
中的AccessGuard
,快速注意:防护装置和其他增强器不需要添加到提供者
数组中。它们是@Injectable()。奇怪,我知道,但事情就是这样
如果在模块中使用了保护,那么该模块需要访问保护依赖项,在这种情况下,模块需要有导入:[MongoModule]
作为MongoModule
提供和导出Mongo
@Injectable()
class这真的很奇怪,因为我为MongoModule
提取了模块以消除这些依赖关系:(