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

时间:2018-06-12 01:46:38

标签: node.js typescript nestjs

我从Nest.js开始,我在创建服务后遇到错误:

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

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

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

4 个答案:

答案 0 :(得分:2)

app.module.ts从提供商处删除PhotoService。 而不是PhotoModule,只需导出PhotoService

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

答案 1 :(得分:1)

请从 providers 中删除任何 controllersapp.module.ts。 即使它们是由 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 {}

答案 2 :(得分:1)

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

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

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);
    }
...
}

答案 3 :(得分:0)

在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);
    });
  });
});

让我知道它是否对您也有帮助