【问题标题】:Nest can't resolve dependencies of the PhotoService (?)Nest 无法解析 PhotoService 的依赖关系(?)
【发布时间】:2018-11-21 07:42:52
【问题描述】:

我从 Nest.js 开始,创建服务后出现错误:

Nest 无法解析 PhotoService (?) 的依赖关系。请验证 [0] 参数在当前上下文中是否可用。

我正在关注数据库示例:https://docs.nestjs.com/techniques/database

这是我的完整代码: https://github.com/marceloHashzen/nestjsbasics

【问题讨论】:

  • 如果您使用的是 Nestjs 5,请查看此问题:github.com/nestjs/nest/issues/723。如果适用,请添加您的姓名。
  • 您好 Preston,我不确定我的问题是否相同。我已经用 Nest 5 开始了一个新项目,Vladyslav 的回答解决了我的问题。

标签: node.js typescript nestjs


【解决方案1】:

在您的 app.module.ts 中,从提供者中删除 PhotoService。 然后在PhotoModule,直接导出PhotoService

@Module({
  // ...prev code
  exports: [PhotoService],
})

【讨论】:

  • 你好@Vladyslav,这解决了我的问题!但是我有点困惑,为什么 PhotoService 是由nest g service 命令添加的,我需要始终手动创建服务,然后将它们导出到自己的模块中?
  • 我遇到了类似的问题,我问了一个问题,这就是答案 - stackoverflow.com/questions/50822301/…。我认为这是最好的解释。
  • 谢谢,这对我帮助很大!
  • 这不起作用。我从 Marcelo 获取了存储库,改变了一些东西,什么都没有......必须有另一个解决方案
  • 谢谢你,@VladyslavMoisieienkov。你的回答对我帮助很大!
【解决方案2】:

帮助我的是 PhotoService 的测试使用模拟。文档很有帮助https://docs.nestjs.com/fundamentals/custom-providers

或者看看我写的测试规范。

import { Test, TestingModule } from '@nestjs/testing';
import { PhotoController } from './photo.controller';
import { PhotoService } from './photo.service';

describe('PhotoController', () => {
  let module: TestingModule;
  let photoController: PhotoController;
  let photoService: PhotoService;

  const resultAll = ['test'];

  const mockPhotoService = {
    findAll: () => (resultAll),
  };

  const photoServiceProvider = {
    provide: PhotoService,
    useValue: mockPhotoService,
  };

  beforeAll(async () => {
    module = await Test.createTestingModule({
      controllers: [PhotoController],
      providers: [photoServiceProvider],
    }).compile();

    photoService = module.get<PhotoService>(PhotoService);
    photoController = module.get<PhotoController>(PhotoController);
  });

  describe('findAll', () => {
    it('should return collection of photos', async () => {
      jest.spyOn(photoService, 'findAll').mockImplementation(() => resultAll);

      expect(await photoController.findAll()).toBe(resultAll);
    });
  });
});

如果对你也有帮助,请告诉我

【讨论】:

    【解决方案3】:

    请从app.module.ts 中删除任何providerscontrollers。 即使它们是由 CLI 工具添加的。

    app.module.ts 中,您只能加载imports 中的其他模块

    imports: [
      WaterModule,
      FireModule,
      AirModule,
      EarthModule,
    ]
    

    由每个特定模块来明确定义可以使用哪些importsprovidersexports

    输入:fire.module.ts

    @Module({
      imports: [TypeOrmModule.forFeature([FireRepository])],
      controllers: [FireController],
      providers: [FireService],
      exports: [FireService],
    })
    export class FireModule {}
    

    【讨论】:

      【解决方案4】:

      在制作没有子模块(只是一个应用程序模块)的应用程序时遇到同样的问题。

      我的解决方法是从连接中获取存储库。

      import { Injectable } from '@nestjs/common';
      import { Repository, Connection } from 'typeorm';
      import { AuthorEntity } from '../entities/AuthorEntity';
      
      @Injectable()
      export class AuthorsService {
          usersRepository: Repository<AuthorEntity>;
      
          constructor(private connection: Connection) {
              this.usersRepository = connection.getRepository(AuthorEntity);
          }
      ...
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 2020-03-12
        • 2020-07-03
        • 2021-04-28
        • 2020-03-07
        • 2019-12-15
        • 2020-12-14
        • 2020-12-13
        • 2019-12-09
        相关资源
        最近更新 更多