很难理解上下文配置(在数据源中)
Having a hard time understanding the context configuration (within DataSources)
在扩展 Apollo Server 的 DataSources
时,我们必须在 class 中创建一个初始化方法:
initialize(config){
this.context=config.context
}
然而,当涉及到 DataSources 的 class 扩展与 Apollo 的 GitHub 回购中看到的 context.As 之间的关系时,我无法清楚地定义一个心智模型,如何通过解构 dataSource 访问自定义数据源的方法,如下所示:
getRandomData: (parent,args,{dataSource})=>{
return dataSources.randomMethod()
}
然而,我们如何将上下文传递给 Apollo Server?我是这样想的:
const server= new ApolloServer({
typeDefs,
schema,
context,
dataSources:()=>({...})
}
但如果是这样的话,{dataSources}
解构在解析器中就没有意义了,那么dataSources和context到底是什么关系呢?谢谢!
Apollo 服务器将 initialize dataSources
within processGraphQLRequest function, it will call dataSources.initialize() 方法与 GraphQL 请求上下文。这就是为什么您可以在自定义数据源 .initialize()
方法中获取 context
对象。并将 dataSources
赋值给 context 的 dataSources
属性,这就是为什么你可以在 GrapQL 解析器中通过解构得到 dataSources
async function initializeDataSources() {
if (config.dataSources) {
const context = requestContext.context;
const dataSources = config.dataSources();
const initializers: any[] = [];
for (const dataSource of Object.values(dataSources)) {
if (dataSource.initialize) {
initializers.push(
dataSource.initialize({
context,
cache: requestContext.cache,
}),
);
}
}
await Promise.all(initializers);
if ('dataSources' in context) {
throw new Error(
'Please use the dataSources config option instead of putting dataSources on the context yourself.',
);
}
(context as any).dataSources = dataSources;
}
}
}
在executeOperation method of ApolloServerBase.
内部调用的processGraphQLRequest
函数
在扩展 Apollo Server 的 DataSources
时,我们必须在 class 中创建一个初始化方法:
initialize(config){
this.context=config.context
}
然而,当涉及到 DataSources 的 class 扩展与 Apollo 的 GitHub 回购中看到的 context.As 之间的关系时,我无法清楚地定义一个心智模型,如何通过解构 dataSource 访问自定义数据源的方法,如下所示:
getRandomData: (parent,args,{dataSource})=>{
return dataSources.randomMethod()
}
然而,我们如何将上下文传递给 Apollo Server?我是这样想的:
const server= new ApolloServer({
typeDefs,
schema,
context,
dataSources:()=>({...})
}
但如果是这样的话,{dataSources}
解构在解析器中就没有意义了,那么dataSources和context到底是什么关系呢?谢谢!
Apollo 服务器将 initialize dataSources
within processGraphQLRequest function, it will call dataSources.initialize() 方法与 GraphQL 请求上下文。这就是为什么您可以在自定义数据源 .initialize()
方法中获取 context
对象。并将 dataSources
赋值给 context 的 dataSources
属性,这就是为什么你可以在 GrapQL 解析器中通过解构得到 dataSources
async function initializeDataSources() {
if (config.dataSources) {
const context = requestContext.context;
const dataSources = config.dataSources();
const initializers: any[] = [];
for (const dataSource of Object.values(dataSources)) {
if (dataSource.initialize) {
initializers.push(
dataSource.initialize({
context,
cache: requestContext.cache,
}),
);
}
}
await Promise.all(initializers);
if ('dataSources' in context) {
throw new Error(
'Please use the dataSources config option instead of putting dataSources on the context yourself.',
);
}
(context as any).dataSources = dataSources;
}
}
}
在executeOperation method of ApolloServerBase.
内部调用的processGraphQLRequest
函数