Nest 无法解析 PhotoService 的依赖关系(?)

Posted

技术标签:

【中文标题】Nest 无法解析 PhotoService 的依赖关系(?)【英文标题】:Nest can't resolve dependencies of the 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 的回答解决了我的问题。 【参考方案1】:

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

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

【讨论】:

你好@Vladyslav,这解决了我的问题!但是我有点困惑,为什么 PhotoService 是由nest g service 命令添加的,我需要始终手动创建服务,然后将它们导出到自己的模块中? 我遇到了类似的问题,我问了一个问题,这就是答案 - ***.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);
    
...

【讨论】:

以上是关于Nest 无法解析 PhotoService 的依赖关系(?)的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

Nest 在测试期间无法解析 UserService 的依赖关系