Nest 无法解析 ItemsService (?) 的依赖关系。请确保索引 [0] 处的参数在 AppModule 上下文中可用

Posted

技术标签:

【中文标题】Nest 无法解析 ItemsService (?) 的依赖关系。请确保索引 [0] 处的参数在 AppModule 上下文中可用【英文标题】:Nest can't resolve dependencies of the ItemsService (?). Please make sure that the argument at index [0] is available in the AppModule context 【发布时间】:2019-11-14 03:59:08 【问题描述】:

我遵循了 Nest JS Crash 教程,Youtube Link, 我跟着这个,但是当我在服务中导入接口时它显示错误

我克隆了教程中给出的存储库,它工作正常,但是当我将该存储库的 src 文件夹复制到我的项目时,它会引发错误。 这是我的服务文件

import  Injectable  from '@nestjs/common';
import  Item  from './interfaces/item.interface';
import  Model  from 'mongoose';

import  ItemsModule  from './items.module'

import  InjectModel  from '@nestjs/mongoose';

@Injectable()
export class ItemsService 
  constructor(@InjectModel('Item') private readonly itemModel: Model<Item>) 
);


当我评论构造函数行时,它工作正常, 我认为问题在于这条线,

从“猫鼬”导入模型;

因为当我将鼠标悬停在这一行时,它显示找不到该模块的声明。 我什至尝试复制工作代码的 package.json 文件进行测试,但错误仍然相同

我的模块项目包含,控制器文件,服务文件,模块文件, dto 文件、接口文件、模式文件、

【问题讨论】:

在你ItemsModule 中你导入MongooseModule.forFeature([name: 'Item', schema: ItemSchema]) 是的,我已经添加了这个 嗯,没有看到你 ItemsModuleItemSchema 文件,很难调试这个。发生这种情况是由于 Nest 找不到您正在注入的模块/服务,通常意味着它在您的模块文件中未正确定义,或者未正确实现。 【参考方案1】:

如果你有两个模块相互依赖 不要直接在两个模块中使用 forwardRef() 导入它们

来源Circular dependency

@Module(
  imports: [
     MongooseModule.forFeature([
        name: 'User', schema: UserSchema ,
     ]),
    forwardRef(() => BusinessModule),
  ],
  providers: [UserService, UserResolver],
  exports: [MongooseModule],
)
export class UserModule 

在另一个模块中

@Module(
  imports: [
    MongooseModule.forFeature([
        name: 'Business', schema: BusinessSchema ,
     ]),
    forwardRef(() => UserModule),
  ],
  providers: [BusinessService, BusinessResolver],
  exports: [MongooseModule],
)
export class BusinessModule 

【讨论】:

【参考方案2】:

请从AppModule 中删除ItemsControllerItemsService。无需将它们包含在 AppModule 中,因为您已经将 ItemsModule 导入到 AppModule 中。

app.module.ts

import  AppService  from './app.service';
import  ItemsModule  from "./items/items.module";
import  MongooseModule from '@nestjs/mongoose';
import config from './config/keys';


@Module(
  imports: [ItemsModule, MongooseModule.forRoot(config.mongoURI)],
  controllers: [AppController],
  providers: [AppService],
)
export class AppModule 

items.service.ts

import  Injectable  from '@nestjs/common';
import  Item  from './interfaces/items.interface';
import  Model  from 'mongoose';
import  InjectModel  from '@nestjs/mongoose';

@Injectable()
export class ItemsService 

    constructor(@InjectModel('Item') private readonly itemModel:Model<Item>)   

    async findAll(): Promise<Item[]> 
        return await this.itemModel.find();
    

    async fineOne(id: string): Promise<Item> 
        return await this.itemModel.findOne(_id: id);
    

【讨论】:

【参考方案3】:

我也遇到了同样的问题。我从 app.module.ts 中删除了 ItemsController 和 ItemsService 文件。现在它可以正常工作了。所以 app.module.ts 看起来像这样。

import  Module  from '@nestjs/common';
import  AppController  from './app.controller';
import  AppService  from './app.service';
import  ItemsController  from './items/items.controller';
import  ItemsService  from './items/items.service';
import MongooseModule from '@nestjs/mongoose';import  ItemsModule  from 
 './items/items.module';
import config from './config/keys';

@Module(
  imports: [ItemsModule,MongooseModule.forRoot(config.mongoURI)],
  controllers: [AppController ],
  providers: [AppService ],
)
export class AppModule 

【讨论】:

【参考方案4】:

为了解决这个问题,您必须从 app.module.ts 文件中删除 ItemsController 和 ItemsService 导入。

这是解决方案,因为:

    您已经在 items.module.ts 文件中导入了 ItemsController 和 ItemsService,因此无需导入 在app.module.ts 文件中再次显示它们。 在你的items.module.ts 你有下一行:
    @Module(
      imports: [MongooseModule.forFeature([ name: 'Item', schema: ItemSchema ])],
      ...
    )
    
    这是使items.service.ts 文件中的依赖注入工作所必需的,因为您可以签入 app.module.ts 文件你没有那行。 当然,您可以将该行添加到您的app.module.ts 文件中,但是创建 items.module.ts 文件。

查看我的repo xD。

【讨论】:

感谢您的解决方案,它可以工作,但是我不明白为什么在 items.module.ts 中导入 ItemsController 和 ItemsService 会导致错误? 从 app.module.ts 中移除 itemsServices 和 ItemsController 工作正常。 拯救了我的一天!谢谢!

以上是关于Nest 无法解析 ItemsService (?) 的依赖关系。请确保索引 [0] 处的参数在 AppModule 上下文中可用的主要内容,如果未能解决你的问题,请参考以下文章

Nest.js 在单元测试中无法解析 Mongoose 模型依赖

Nest 无法解析 UserModel 的依赖项(?)

Nest 无法解析存储库的依赖关系

Nest 无法解析 UsersService (UserModel, ?) 的依赖关系

Nest 无法解析 RabbitMQService 服务的依赖关系

Nest 无法解析 JwtService (?) [JWT_MODULE_OPTIONS] 的依赖项