You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Server中DataSources与context的配置及关联关系疑问

Apollo Server DataSources与context的关系说明
  • 核心逻辑:DataSources是Apollo Server自动注入到context的内置属性,你手动配置的context内容和框架生成的dataSources会合并为最终的resolver上下文对象。

全流程运行逻辑

  1. 请求进入时,Apollo Server首先执行你配置的context函数/对象,生成当前请求的自定义上下文(通常存储请求头、用户认证信息等)
  2. 紧接着执行你配置的dataSources工厂函数,生成所有自定义数据源的实例
  3. 框架自动调用每个数据源实例的initialize方法,把包含自定义上下文的配置传入,你在方法内把this.context = config.context赋值后,就能在数据源的所有方法里访问当前请求的自定义上下文
  4. 所有初始化完成的数据源实例会被统一挂载到上下文的dataSources字段上,最终resolver拿到的第三个参数就是合并了自定义内容和dataSources的完整上下文

配置写法的疑问解答

你给出的配置写法完全符合规范:

const server = new ApolloServer({
   typeDefs,
   schema,
   context,
   dataSources: () => ({ /* 这里返回你的所有数据源实例 */ })
})

你不需要手动把dataSources写入context配置,框架会自动完成合并,所以resolver里直接解构{ dataSources }是完全合理的。

小提示:你给出的resolver示例存在笔误,正确写法需要注意复数形式,同时要对应你在dataSources工厂函数里定义的数据源key:

getRandomData: (parent, args, { dataSources }) => {
  // 假设你在dataSources工厂函数里返回的key为randomAPI
  return dataSources.randomAPI.randomMethod()
}

内容的提问来源于stack exchange,提问作者Peter Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:27:03