Javascript Apollo RESTDataSource调用其他RESTDataSource?

Javascript Apollo RESTDataSource调用其他RESTDataSource?,javascript,graphql,apollo,apollo-server,restdatasource,Javascript,Graphql,Apollo,Apollo Server,Restdatasource,假设我有两个扩展RESTDataSource的API类: class MoviesAPI extends RESTDataSource { async getMovies() {} } class SongsAPI extends RESTDataSource { async getSongs() {} } 如何在现有Apollo服务器上下文中从getMovies调用getSongs?您可以通过datasource类中的this.context获取Apollo服务器上下文,并通过this.c

假设我有两个扩展RESTDataSource的API类:

class MoviesAPI extends RESTDataSource {
async getMovies() {}
}

class SongsAPI extends RESTDataSource {
async getSongs() {}
}

如何在现有Apollo服务器上下文中从
getMovies
调用
getSongs

您可以通过datasource类中的
this.context
获取Apollo服务器上下文,并通过
this.context.dataSources
获取
数据源

例如

server.ts

从“阿波罗服务器”导入{ApolloServer,gql};
从“/MoviesAPI”导入{MoviesAPI};
从“/SongsAPI”导入{SongsAPI};
常量typeDefs=gql`
类型查询{
电影:弦
}
`;
常量解析程序={
查询:{
电影:({dataSources})=>{
返回dataSources.moviesAPI.getMovies();
},
},
};
const server=新服务器({
typeDefs,
解析器,
数据源:()=>{
返回{
moviesAPI:新的moviesAPI(),
songsAPI:new songsAPI(),
};
},
});
server.listen().then({url})=>{
log(`Apollo server正在侦听${url}`);
});
MoviesAPI.ts

从“apollo数据源rest”导入{RESTDataSource};
导出类MoviesAPI扩展RESTDataSource{
异步getMovies(){
const songs=wait this.context.dataSources.songsAPI.getSongs();
const movies=['a','b'];
返回JSON.stringify({movies,songs});
}
}
SongsAPI.ts

从“apollo数据源rest”导入{RESTDataSource};
导出类SongsAPI扩展RESTDataSource{
异步getSongs(){
返回['x','y'];
}
}
从客户端发送GraphQL查询:

查询{
电影
}
响应有效载荷:

{
“数据”:{
“电影”:“{”电影“:[\'a\',\'b\'],\'songs\':[\'x\',\'y\']}”
}
}
软件包版本:
“apollo数据源rest”:“^0.8.1”
“apollo服务器”:“^2.12.0”


源代码:

我想这个解决方案已经不起作用了,
这个.context.dataSources
在我的例子中是空的:/啊,对不起,我刚才在
RESTDataSource
类的initialize函数中检查了
这个.context.dataSources
,它没有定义。从类的函数内部使用
this.context.dataSources
时,它会起作用:)