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

时间:2019-07-03 12:46:09

标签: typescript nestjs

我遵循了Nest JS崩溃教程Youtube Link, 我遵循了这个步骤,但是当我在服务中导入界面时,它显示错误

  

嵌套无法解析ItemsService(?)的依赖项。请确保AppModule上下文中索引为[0]的参数可用。

我克隆了教程中给定的存储库,它工作正常,但是当我将该存储库的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文件,界面文件,架构文件

3 个答案:

答案 0 :(得分:2)

我也遇到了同样的问题。我从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 {}

答案 1 :(得分:1)

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

这是解决方案,因为:

  1. 您已经在items.module.ts文件中导入了ItemsController和ItemsService,因此没有必要导入 再次将它们放在app.module.ts文件中。
  2. 在您的items.module.ts中,下一行:
    @Module({
      imports: [MongooseModule.forFeature([{ name: 'Item', schema: ItemSchema }])],
      ...
    })
    
    为了使items.service.ts文件中的依赖项注入有效,这是必需的,因为您可以在 app.module.ts文件中没有该行。
  3. 您当然可以将该行添加到app.module.ts文件中,但是没有必要创建 items.module.ts文件。

检查我的repo xD。

答案 2 :(得分:0)

请从 ItemsController 中删除 ItemsServiceAppModule。无需将它们包含在 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});
    }
}