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
中删除任何providers
和controllers
。
即使它们是由 CLI 工具添加的。
在app.module.ts
中,您只能加载imports
中的其他模块
imports: [
WaterModule,
FireModule,
AirModule,
EarthModule,
]
由每个特定模块来明确定义可以使用哪些imports
、providers
和exports
。
输入: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 无法解析 UsersService (UserModel, ?) 的依赖关系
Nest 无法解析 RabbitMQService 服务的依赖关系