我花了相当多的时间阅读GraphQL教程,但不幸的是,它们似乎没有涵盖足够的深度,我无法理解。我真的很感谢你对这个现实世界的例子的帮助。
在示例中,查询位于解析器对象的根;我可以让它在单级查询中正常工作。但是,当我尝试解析嵌套查询时,嵌套解析程序从未被调用。让我非常困惑的是,我发现graphql网站上没有发布的每一个教程都放在一个查询对象中,并将它们的查询嵌套在下面,而不是根级别。
考虑以下模式:
type Product {
id: String!
retailerId: String!
title: String!
description: String
price: String!
currency: String!
}
type OrderLine {
product: Product!
quantity: Int!
}
type Order {
id: String!
retailerId: String!
orderDate: Date!
orderLines: [OrderLine!]!
}
type Query {
product(id: String!): Product
order(id: String!): Order
}
schema {
query: Query
}
以及以下查询:
query {
order(id: "1") {
id
orderLines {
quantity
}
}
}
我已经尝试了实现解析器的多个版本(现在只是测试数据),似乎没有一个版本返回我执行的内容。这是我当前的解析器实现:
const resolvers = {
OrderLine: {
quantity: () => 1,
},
Order: {
orderLines: (parent: any, args: any) => { console.log("Calling order lines"); return []; },
},
Query: {
product(parent, args, ctx, other) {
return { id: args.id.toString(), test: true };
},
order: ({ id }) => { console.log("Calling order 1"); return { id: id.toString(), testOrder: true, orderLines: [] }; },
},
order: ({ id }) => { console.log("Calling order 2"); return { id: id.toString(), testOrder: true, orderLines: [] }; },
};
在控制台中,我可以看到“调用订单2”日志消息,没有指向“调用订单行”的日志,订单行数组为空。
因此,问题分为两部分:
1) 在上面的例子中,为什么会点击“调用订单2”而不是“调用订单1”?
2) 为什么上面的操作不适用于嵌套查询顺序。订单行?
提前谢谢!
如果使用构建模式生成模式,为字段提供解析器的唯一方法是通过根对象。但这更像是一种黑客行为——您实际上并没有覆盖字段的默认解析程序,因此,您基本上仅限于使用根级字段(因为您正在艰难地学习)。这就是为什么只调用Query.order
函数这是一个根级字段。这里详细解释了为什么通过根(类型)传递函数会起作用。
底线是你不应该使用buildSchema。如果要使用SDL定义模式,请迁移到使用Apollo Server。
质疑
type Query {
product(id: String!): Product
order(id: String!): Order
users: User
}
schema {
query: Query
}
在解析器中
const resolvers = {
order: ({ id }) => function
product: ({ id }) => function
}
Graphql致力于查询解析器概念。如果要查询任何查询(示例用户),必须具有解析器(ie用户),该解析器返回的用户类型为User。Graphql查询是交互式的,区分大小写。下一步是为订单/产品查询实现解析器函数。事实上,我们还没有提到的一点是,不仅根字段,而且实际上GraphQL模式中类型上的所有字段都有解析器函数。
1)为什么在上面的例子中它击中了“呼叫订单2”而不是“呼叫订单1”?在此查询中
query {
order(id: "1") {
id
orderLines {
quantity
}
}
}
然后它转到返回具有定义类型的订单的顺序
2) 为什么上面的操作不适用于嵌套查询顺序。订单行?
You can only use two query first order and second product only as per your schema
请检查此需求的嵌套查询文档。
如果我有模式: 和一个解析器: 和两个可能的查询。问题#1: 和查询#2: 是否可以优化冲突解决程序,使查询#1 readAllPosts仅从数据库中提取标题,而查询#2则同时提取标题和lotsofdata? 我查看了parent、args、context和info参数,但看不到任何指示解析器是否被调用以响应像#1或#2这样的查询的内容。
我正在使用Jsoup解析短html文档,该文档包含对结果进行某些逻辑操作所需的一些自定义标记 这样地: 在这种情况下,内部内容似乎丢失了,outerHtml()方法显示如下: 但是如果“show if”标签包含一个简单的文本,比如你好,它就会像预期的那样工作。 有什么想法吗?谢谢你。
我试图通过构建一个具有以下模式的服务器来熟悉Graphql: 并映射到以下数据: 在编写解析器时,我注意到很多样板代码——我必须为每个持有外键的对象成员编写概念上相同的字段解析器。 有没有办法通过ID创建类型解析器?例如,字段或查询总是由
您好,我正在尝试将我的graphql查询格式化为json请求,如下所示。我想以字符串形式传递id,值为“3”,当我将其作为json请求发送时,graphql会以错误的形式拒绝。我如何解决这个问题? edit1中添加的架构:`#公开指定此标量行为的URL。指令@specifiedBy( URL: String!)on|SCALAR 架构{query:RootQueryType mutation:mu
首先,根据句子的大小,解析在小的句子集上平稳运行--从200ms到1s的顺序。 我想实现什么? 我想在1-2小时内解析50L个句子。 不知怎么的,我需要把这个转换成-> 转换为多线程调用。我编写了一个多线程执行器来做这件事,它看起来像这样-> 有什么办法可以做到吗?我能回答先前提出的问题,但没有什么好处。
GraphQL中有几个地方需要解析,而不仅仅是中的。 后端API- -用户列表-最少信息-姓名、id 构建一个架构来执行以下查询 模式可以如下- 上述模式中的解析器需要在两个不同的地方包含/处理用户详细信息获取调用。1.用户列表-和2.。必须记住处理这种类型,其中您只有一个用户ID将其转换为实际用户。 在撰写本文时,GraphQL支持和上的。不可能为整个指定解析器-只有中的可以具有解析器。因此,如