要让Apollo Server传入的dataStore在类中可见,需要在类中通过constructor方法将dataStore作为属性进行实例化,并将constructor方法中的参数对象中的dataSources属性指定为传递进来的dataStore对象。示例代码如下:
const { ApolloServer } = require('apollo-server');
const { MyDataSource } = require('./myDataSource');
class MyResolver {
constructor({ dataSources }) {
// 将 dataStore 作为属性进行实例化
this.myDataSource = new MyDataSource();
// 将 dataSources 中的 dataStore 指定为实例化后的 MyDataSource 对象
dataSources.myDataSource = this.myDataSource;
}
async myQuery(_, __, { dataSources }) {
// 可以通过 this.myDataSource 访问 dataStore
const result = await this.myDataSource.getData();
return result;
}
}
const server = new ApolloServer({
typeDefs,
resolvers: [MyResolver],
// 将 dataStore 传入 context 的 dataSources 属性中
dataSources: () => ({
myDataSource: new MyDataSource(),
}),
context: ({ req }) => {
return {
// 将传入的 dataStore 保存在 context 中
dataSources: req.dataSources,
};
},
});
通过在类中使用constructor方法将dataStore作为属性进行实例化,并将dataSources属性指定为传递进来的dataStore对象,就可以在类中访问和使用dataStore了。