[英]NestJS can't resolve dependency of imported module
我有四個模塊,App -> Dog -> Access -> Mongo(依賴項如箭頭所示)。 在應用程序中,MongoDB 也與MongooseModule.forRootAsync()
連接,然后在MongoModule
使用MongooseModule.forFeature()
。 完整代碼可以在這個示例項目中找到。
我想用AccessGuard
通過提供AccessModule
(其內部使用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 {}
dog.module.ts:
@Module({
imports: [AccessModule],
providers: [AccessGuard],
controllers: [DogController],
})
export class DogModule {}
access.module.ts:
@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()
}
}
mongo.module.ts
@Module({
imports: [
MongooseModule.forFeature([
{
name: Dog.name,
schema: DogSchema,
},
]),
],
providers: [Mongo],
exports: [Mongo],
})
export class MongoModule {}
當我添加MongoModule
到DogModule
它的工作原理。 然而,我猜這不應該是這樣,因為 DogModule 實際上並不使用Mongo
類。 DogModule
只需要AccessModule
的AccessGuard
。
快速說明:守衛和其他增強器不需要添加到providers
數組中。 它們是@Injectable()
,但它們存在於一個偽空間中,允許它們位於@Module()
s 的providers
數組之外。 奇怪,我知道,但事情就是這樣。
從那里發生的所有需要是,如果在模塊中使用了守衛,那么該模塊需要訪問守衛依賴項,在這種情況下,模塊需要imports: [MongoModule]
作為MongoModule
provides
和exports
Mongo
@Injectable()
類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.