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



i follwed nest JS崩溃教程,YouTube链接,我遵循此操作,但是当我在服务中导入界面时,它显示了错误

NEST无法解析项目服务(?(的依赖关系。请确保在AppModule上下文中可用索引[0]的参数。

i我克隆了教程中给出的存储库,它工作正常,但是当我将该存储库的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>) {}
});
}

当我评论构造函数时,它可以正常工作,我认为问题是这个行,

从'Mongoose'';

导入{model}

因为当我在这条线上徘徊时,它显示出无法找到此模块的声明。我什至尝试过复制软件包。工作代码的json文件进行测试,但仍然错误仍然相同

我的模块项目包含,控制器文件,服务文件,模块文件, DTO文件,接口文件,架构文件,

为了求解它,您必须从 app.module.ts文件中删除itemscontroller和itempsService导入。

这是解决方案,因为:

  1. 您已经在 items.module.ts文件中导入itemscontroller和itempsService,因此不必导入它们再次在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文件。

检查我的回购XD。

请从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});
    }
}

我也遇到了同一问题。我从app.module.ts.now上删除了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 {}

在应用模块中不使用其他控制器或提供商,例如USerController

app.module.ts

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost:27017/nest'),
    UserModule,
    TasksModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})

和其他模块,例如user.module.ts

@Module({
  imports: [
    MongooseModule.forFeature([
      {
        name: 'users',
        schema: UserSchema,
      },
    ]),
  ],
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService],
})

如果您有两个模块取决于彼此不要直接在两个模块中使用forwardref((

源循环依赖性

@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 {}

我已经以这种方式解决了它 -

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: '',
      database: 'nest-react-auth',
      entities: [User],
      synchronize: true,
    }),
    TypeOrmModule.forFeature([User]),
  ],
  controllers: [AppController],
  providers: [AppService],
})

在这里,我添加了我的实体文件用户 - TypeOrmModule.forFeature([User]),并解决了。

我将其添加到项目模块中并求解

imports: [TypeOrmModule.forFeature([Item])],

我也遇到了同样的问题。对我来说,我错过了其中一个子模型的提供者领域的服务。然后我指定了下面的指定,错误消失了。

@Module({
  imports: [MongooseModule.forFeature([{ name: 'test', schema: testSchema }])],
  controllers: [TestController],
  providers: [TestService],
})

请在要使用它的其他模块中导入@itemmodule。https://docs.nestjs.com/security/authentication

我也遇到了同样的问题,然后我从控制器和提供商中删除ittemService和itemController行,并解决了错误。

最新更新