【问题标题】:Apollo Server v2 - GraphQL resolver not being invokedApollo Server v2 - 未调用 GraphQL 解析器
【发布时间】:2020-01-28 06:05:56
【问题描述】:

我是 graphql 世界的新手,我正在尝试使用 Apollo Server v2 设置多个模块化模式和解析器。

我注意到一个奇怪的行为,我的解析器的顺序存在问题。 在Object.assign({}, propertiesResolver, agreementsResolver) 行中,propertiesResolver 定义的所有解析器都不会被调用,因为它是解析器顺序中的第一个。如果我交换了像 Object.assign({}, agreementsResolver, propertiesResolver) 这样的两组解析器,现在由 agreementResolver 定义的解析器不会被调用。

我是否在这里遗漏了有关 graphql 执行的一些重要细节?

注意:我所有的架构定义和对应的解析器都被正确定义了,我觉得我导入东西的顺序有问题。

【问题讨论】:

    标签: node.js graphql react-apollo apollo-server express-graphql


    【解决方案1】:

    使用Object.assign时:

    目标对象中的属性将被源中的属性覆盖,如果它们具有相同的键。后面的来源的属性同样会覆盖早期的。

    Object.assign 不会进行深度合并,这大概是您所期望的。如果两个源具有相同的属性,则仅使用最后一个源的属性。所以给定两个对象:

    const a = {
      Query: {
        foo: () => 'FOO',
      },
    }
    const b = {
      Query: {
        bar: () => 'BAR',
      },
    }
    

    如果您使用Object.assign 合并它们,则生成的对象将具有一个匹配abQuery 属性(取决于后面的参数)。为了进行 deep 合并,将具有相同名称的属性对象组合在一起,您应该使用现有的解决方案,例如 lodash

    const resolvers = _.merge(a, b)
    

    something similar

    【讨论】:

    • 啊!我怎么错过了!!厉害了,谢谢!!你觉得 JS 有没有类似 _.merge() 的东西?
    • 不,规范中没有任何内容,据我所知,未来没有添加它的计划。您可以导入just the one function 或使用其他类似的库,如deepmerge。或者自己写,因为你只需要下两层。
    猜你喜欢
    • 2021-01-25
    • 2019-05-18
    • 2020-03-08
    • 2020-03-27
    • 2021-07-29
    • 2021-03-25
    • 2018-10-04
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多