Graphql NestJS与Apollo数据源

Graphql NestJS与Apollo数据源,graphql,apollo,nestjs,apollo-server,Graphql,Apollo,Nestjs,Apollo Server,我一直在尝试用NestJS重新创建。但当我尝试使用NestJS时,从外部数据源获取数据时失败,错误如下: [Nest]29974-07/14/2020,9:33:20 PM[ExceptionHandler]无法读取未定义+125971ms的属性“fetch” TypeError:无法读取未定义的属性“fetch” 似乎数据源类没有被正确地注入解析器中,但我不明白为什么 //数据源类 @可注射() 类LaunchAPI扩展了RESTDataSource{ 构造函数(){ 超级(); 此.bas

我一直在尝试用NestJS重新创建。但当我尝试使用NestJS时,从外部数据源获取数据时失败,错误如下:

[Nest]29974-07/14/2020,9:33:20 PM[ExceptionHandler]无法读取未定义+125971ms的属性“fetch”
TypeError:无法读取未定义的属性“fetch”
似乎数据源类没有被正确地注入解析器中,但我不明白为什么

//数据源类
@可注射()
类LaunchAPI扩展了RESTDataSource{
构造函数(){
超级();
此.baseURL=https://api.spacexdata.com/v2/';
}
异步getLaunchById({launchId}){
返回等待这个。获取('launches',{航班号:launchId});
}
}
//嵌套解析器
@解析程序(“启动”)
@可注射()
导出类启动解析程序{
构造函数(专用只读launchAPI:launchAPI){}
@查询('getLaunch')
异步getLaunch(
@Args('id')id:string
) {
return wait this.launchAPI.getLaunchById({launchId:id})
}
}
//应用程序模块
@模块({
进口:[
GraphQLModule.forRoot({
数据源,
上下文:({req})=>{
如果(请求){
返回{headers:req.headers};
}
},
类型路径:['./***/*.graphql'],
定义:{
路径:join(process.cwd(),'src/graphql.schema.ts'),
输出:“类”,
},
是的,
})
],
控制器:[AppController],
提供程序:[AppService、LaunchAPI、LaunchResolver],
})
导出类AppModule{}

使用Apollo的数据源和嵌套解析器的最佳方式是什么?

我能够通过在我的每个解析器方法上使用
@Context
装饰器来解决这个问题,以获取Apollo数据源服务(例如
数据源
),而不是将数据源注入解析器类。因此,更新后的数据如下所示:

//嵌套解析器
@解析程序(“启动”)
@可注射()
导出类启动解析程序{
@查询('getLaunch')
异步getLaunch(
@上下文('dataSources'){launchAPI}:数据源,
@Args('id')id:string
) {
返回wait launchAPI.getLaunchById({launchId:id})
}
}
//app.module.ts
//设置我们的解析器需要的任何数据源
常量数据源=()=>({
launchAPI:新的launchAPI(),
});
@模块({
进口:[
GraphQLModule.forRoot({
数据源,
上下文:({req})=>{
如果(请求){
返回{headers:req.headers};
}
},
类型路径:['./***/*.graphql'],
定义:{
路径:join(process.cwd(),'src/graphql.schema.ts'),
输出:“类”,
},
是的,
})
],
控制器:[AppController],
提供程序:[AppService、LaunchAPI、LaunchResolver],
})
导出类AppModule{}

如果在解析器和RestDataSource之间有一个服务层(即:解析器-->BL服务-->RestDataSource),您将如何解决此问题?