【发布时间】:2019-08-13 21:12:51
【问题描述】:
让我先说我不是 javascript 开发人员,所以我可能遗漏了一些非常明显的东西。我是一名数据仓库开发人员,我正在创建一个可以与我们的 DW 通信的 graphql 服务器。
我一直在尝试通过在上下文中使用包含多个数据加载器的单个对象来让数据加载器在我的 graphql 服务器上工作。然后我试图在解析器中调用适当的数据加载器。但是,我一直无法让它正常工作。仅当我在服务器上下文中单独引用数据加载器时,合并的数据加载器对象才有效。
我试图在加载器上遵循与我的模型类似的模式,每个模型都分解为一个单独的文件,然后通过文件结构的递归合并为单个对象。
例如,我有一个名为 loaders 的对象,它包含两个加载器:countryLoader 和marketectorLoader,每个加载器都定义在“loaders”目录下的单独文件中。在我的服务器上下文中,以下工作
import * as loaders from "./loaders"
graphQLServer.use('/graphql', bodyParser.json(),
graphqlExpress({
schema,
context: {
countryLoader: loaders.countryLoader()
然后我可以在我的解析器中调用它:
StateProvince: {
Country: (parent, args, {countryLoader}) => {
countryLoader.load(parent.Country_fkey) }},
这个功能正确,批处理并返回正确的查询结果,但我不希望将加载器对象中的每个特定数据加载器声明为上下文的一部分。但是,我一直无法弄清楚在上下文中使用 loaders 对象并调用适当的语法 适当的解析器中的单个数据加载器。
我尝试了以下示例的几种变体: https://github.com/relay-tools/react-relay-network-layer/blob/master/examples/dataLoaderPerBatchRequest.js
这似乎正在使用我试图利用的技术类型:
//context snippet:
context: {
request: req, // just for example, pass request to context
dataLoaders: initDataLoaders(),
},
但是,没有运气。我怀疑问题出在我的解析器语法上,但我不确定,而且我无法找到具有多个数据加载器的工作示例。
【问题讨论】: