GraphQL 嵌套查询定义

2024-03-13

我正在尝试为我的查询创建树状结构,以摆脱像

peopleList, peopleSingle, peopleEdit, peopleAdd, peopleDelete companyList, companySingle, companyEdit, companyAdd, companyDelete etc. 

最后我想发送这样的查询:

query test {
  people {
    list {
      id
      name
    }
    single(id: 123) {
      id
      name
    }
  }
  company {
    list {
      id
      name
    }
    single(id: 456) {
      id
      name
    }
  }
}

mutation test2 {
  people {
    create(data: $var) {
      id
      name
    }
  }
  people {
    edit(id: 123, data: $var) {
      id
      name
    }
  }
}

这是我在人员模块上的查询对象的一部分:

people: {
  type: //What type this should be?
  name: 'Root of People queries',
  fields: () => ({
    list: {
      type: peopleType,
      description: 'Returns all people in DB.',
      resolve: () => {
        // resolve method implementation
      }
    },
    single: {
      type: peopleType,
      description: 'Single row from people table. Requires ID argument.',
      args: {
        id: { type: new GraphQLNonNull(GraphQLID) }
      },
      resolve: () => {
        // resolve method implementation
      }
    }
  })
}

我尝试将此代码片段放入 GraphQLObjectType 中,然后在 RootQuery 中将它们组合在一起(再次使用 GraphQLObjectType) - 没有成功。

替代方法可能是创建新类型 - 例如 peopleQueriesType,在该类型内将我的所有查询指定为字段,然后为此对象创建单个查询。但这对我来说似乎很奇怪 - 用不必要的对象污染我的代码只是为了将我的查询合并为树状形状。

我试图查看 Apollo 服务器的实现,如果它可以执行这种查询结构,但在文档中找不到任何帮助。

我在我的服务器上使用node.js + express + graphql-js。


简短回答:
类型应该是GraphQLObjectType包含这样的所有字段:

type: new GraphQLObjectType({ name: 'patientQuery', fields: { find, findOne } })

Details:我最终使用下面的代码进行了此查询:

{
  patient {
    find {
      id
      active
    }
    findOne(id: "pat3") {
      id
      active
    }
  }
}

in patient/queries/index.js我有这个

import findOne from './find-one.js';
import find from './find.js';
import { GraphQLObjectType } from 'graphql';

export default {
  patient: {
    type: new GraphQLObjectType({ name: 'patientQuery', fields: { find, findOne } }),
    resolve(root, params, context, ast) {
      return true;
    }
  }
};

then in queries.js

import patient from './patient/queries/index.js';
export default {
  ...patient
};

最后是我的架构schema.js传递到 graphql Express 服务器

import {
  GraphQLObjectType,
  GraphQLSchema
} from 'graphql';

import queries from './queries';
import mutations from './mutations';

export default new GraphQLSchema({
  query: new GraphQLObjectType({
    name: 'Query',
    fields: queries
  }),
  mutation: new GraphQLObjectType({
    name: 'Mutation',
    fields: mutations
  })
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GraphQL 嵌套查询定义 的相关文章

  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • 想要动态处理与分页相关的页码显示:ReactJS

    我有一些分页逻辑工作得很好 唯一的问题是我只能让它显示并固定数量的页面可供选择 现在我已经把它放到了 5 页 但我希望它能够根据总记录动态更改 假设我有 100 条记录 每页限制为 10 条 将有 10 页 现在我只能让它以这种方式显示 第
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • javascript 选择自定义光标 (svg)

    我正在动态地将光标更改为悬停时的本地 svg element on mouseover function this css cursor url svgs pointer svg 9 30 auto 工作正常 但我想选择该 svg 来操纵其
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 如何使用角度材料在具有可扩展行的表格中创建嵌套垫表

    我有以下数据 id c9d5ab1a subdomain wing domain aircraft part id c9d5ab1a info mimetype application json info dependent parent
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • Amplify 和 AppSync 不更新来自多个来源的突变数据

    我一直在尝试与 AppSync GraphQL 交互 Lambda 创建 有效 更新 不更改数据 Angular 已收到创建 更新订阅 但对象为空 Angular 欺骗更新 不更改数据 AppSync 控制台 欺骗更新 不更改数据 Post
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 表单发布请求并存储收到的数据

    我有一个非常简单的表单 在提交时发出发布请求
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo

随机推荐

  • 将 Autofac 与 SignalR 结合使用时出现范围错误

    我正在尝试注入HttpContextBase在我的 SignalR 中心 public class EventHub Hub IDisconnect private readonly HttpContextBase httpContextB
  • PySphere 和 PyVmomi 之间有什么区别?

    我需要编写 python 脚本来自动配置在 ESX ESXi 主机上运行的虚拟机的时间 我不知道该使用哪个 API 我能够找到 VMWare API 的 python 绑定 即 PySphere 和 PyVmomi 谁能解释一下它们之间有什
  • Kubernetes资源文档中的M和Mi有什么区别?

    阅读 Kubernetes 文档 https kubernetes io docs concepts configuration manage resources containers https kubernetes io docs co
  • 使用 Microsoft Graph 列出 Microsoft Sharepoint 站点

    我正在使用 Microsoft Graph 使用 Microsoft OneDrive 和 Microsoft Sharepoint 据我了解 从登录用户获取文件列表的 URLOneDrive is v1 0 me drive root c
  • 如何隐藏mapbox-gl中所有打开的标记弹出窗口?

    我找不到隐藏所有打开的标记弹出窗口或什至检查标记弹出状态的方法 我会想getPopup isOpen 可以让你检查状态 并且getPopup remove 在迭代某个数组中所有存储的标记时运行 将完成您在这里所需的操作
  • Minimax/ Alpha beta 剪枝移动顺序?

    我读过 例如 http radagast se othello Help order html http radagast se othello Help order html 首先搜索每个级别的最佳动作 可以使用迭代加深找到 使得搜索速度
  • 如何在heroku中运行“Rails Runner”?

    这就是我想做的 查找是否有人在推特上发布过有关所提供的特定课程的推文 如果有人确实发布了相关推文 我想将该推文保存到我的推文模型中 然后在相应的课程页面中显示该推文 这些脚本通过运行在本地运行rails runner get tweets
  • transitiveMemberOf $filter 仅当您是直接成员时才有效

    我正在尝试使用 Graph 来查明用户是否是某个组的传递成员 例如 Bob 是 Marketing 的成员 而 Marketing 是 Company 的成员 Bob 是 Company 的成员吗 If I do me transitive
  • 如何在 FastAPI 的 CORS 中间件中正确使用正则表达式?

    我有一个使用 FastAPI 后端和 Next js 前端的应用程序 在具有稳定来源的开发和生产中 我能够毫无问题地使用 CORSMiddleware 不过 我已经使用 Vercel 部署了 Next js 前端 并且希望利用 Vercel
  • 提取“/”前后的字符

    我试图提取 之前和之后的字符 但没有成功 句子是 XXXX YYY ZZZ AV HAHEHRS 3061 SDDW ASDA DDSF SAO JOSE DOS CAMPOS SP CEP 00000 000 输出应该是 SAO JOSE
  • PDFBox:处理非常大的 PDF。

    我正在处理一些非常大的 PDF 有些大小超过 7GB PDF 最多有 20 000 页和许多整页彩色图像 我想使用 PDFBox 来处理 PDF 但由于大小 当我尝试打开 PDF 时 出现 OutOfMemoryError 我正在使用版本
  • 如何用一个元素创建 3D 透视图像?

    I have a code that given an image does the effect of perspective in 3D This is the result 这是代码 thumb margin 100px perspe
  • 混合 http/https 站点

    到目前为止 我的 https 部署通常涉及使用 https 对整个站点进行简单锁定 并在 Web 服务器上提供 http 到 https 的重定向 我现在计划拥有一个 ASP NET MVC 站点 在云上 其中包含 http 和 https
  • Firebase 身份验证令牌过期时间

    我刚刚升级到新版本的 Firebase 但找不到在哪里可以设置 Firebase 身份验证令牌的过期时间 它曾经位于 Firebase 旧布局中的身份验证部分下 我将其设置了 1 年 Firebase 还有这个吗 如果您继续使用 Fireb
  • 0x7f 有什么特别之处?

    我正在阅读 avro 格式规范并试图了解其实现 下面是解码的方法长值 https avro apache org docs 1 8 2 spec html schema primitive Override public long read
  • 为什么局部函子不好?

    例如 如果谓词仅使用一次 那么在主函数中声明类加倍器有什么问题 include
  • 如何停止 docker pull

    我刚刚开始学习docker 在教程中 我看到了 docker pull 命令 可以像这样使用docker pull container name从 docker hub 存储库中提取相应的容器 But in case if you canc
  • HDFS 复制因子更改

    如果集群中的复制因子发生变化 例如从 5 更改为 3 并且集群重新启动 旧文件块会发生什么情况 它们是否会被视为过度复制并被删除 或者复制因子仅适用于新文件 这意味着旧文件块被复制 5 次 新文件块 重新启动后 被复制 3 次 如果集群不重
  • 为什么在定义具有 0 个输出的 MATLABContainers.Map 子类方法时出现“太多输出参数”?

    我试图通过子类化 MATLABContainers Map 类并添加具有 0 个输出的附加方法来扩展它 但在执行该方法时遇到 输出参数太多 错误 这并不是新方法实现所特有的 任何使用 0 输出扩展Containers Map 的其他方法都会
  • GraphQL 嵌套查询定义

    我正在尝试为我的查询创建树状结构 以摆脱像 peopleList peopleSingle peopleEdit peopleAdd peopleDelete companyList companySingle companyEdit co