将查询参数从顶级传递到字段级别
Passing the query param from top level to filed level
我有一个如下所示的 graphql 查询:
userInfo (id: userId) {
name
email
address {
street
country
}
}
因此 name
和 email
将由名为 details
的其余端点解析,但是 address
字段需要由另一个名为 address
。 address
休息端点还需要在 userInfo
中传递的 userId
(因为我的休息服务需要该字段)。我不确定,在这种情况下我该如何设计解析器?
同样的问题,一个字段一旦解析后是否可以将数据发送到另一个字段?这在 grapqhql 中可能吗?
在 GraphQL 中,据说每个字段 解析 为特定值。在 GraphQL.js 中,这个值要么是解析器 returned 的任何值,要么,如果解析器 returned 一个 Promise,则无论 Promise 解析到什么。该值作为第一个参数传递给每个子字段的解析器。
实际上,这意味着即使您的类型具有特定字段并且您 return 的对象应该匹配这些字段,它也可以包含任意数量的 附加 属性。
例如,您的 userInfo
解析器可能如下所示:
async (parent, args, context, info) => {
const { name, email } = await getDetails(args.id)
return {
name
email
id: args.id,
}
}
即使您没有 id
字段,我们仍然可以将其包含在我们 return 的对象中。这样,我们可以将一些额外的信息(例如我们的参数)传递给任何子字段的解析器。然后,在你的 address
解析器中:
async (parent, args, context, info) => {
// `parent` contains `name`, `email` and `id` properties
return getAddress(parent.id)
}
我会添加(@daniel 回答)您可以在查询中明确传递此 ID(w/o address
解析器更改)。
userInfo (id: userId) {
name
email
address (userID: userId) {
street
country
}
}
为了使其(address
解析器)通用,我们可以使用两个参数源:
async (parent, args, context, info) => {
// `parent` (user) can contain `id` property
return getAddress(args.userID ? args.userID : parent.id)
}
因为您应该可以只查询地址(对于给定的 userId
),因为其余的 api.
是可能的
我有一个如下所示的 graphql 查询:
userInfo (id: userId) {
name
email
address {
street
country
}
}
因此 name
和 email
将由名为 details
的其余端点解析,但是 address
字段需要由另一个名为 address
。 address
休息端点还需要在 userInfo
中传递的 userId
(因为我的休息服务需要该字段)。我不确定,在这种情况下我该如何设计解析器?
同样的问题,一个字段一旦解析后是否可以将数据发送到另一个字段?这在 grapqhql 中可能吗?
在 GraphQL 中,据说每个字段 解析 为特定值。在 GraphQL.js 中,这个值要么是解析器 returned 的任何值,要么,如果解析器 returned 一个 Promise,则无论 Promise 解析到什么。该值作为第一个参数传递给每个子字段的解析器。
实际上,这意味着即使您的类型具有特定字段并且您 return 的对象应该匹配这些字段,它也可以包含任意数量的 附加 属性。
例如,您的 userInfo
解析器可能如下所示:
async (parent, args, context, info) => {
const { name, email } = await getDetails(args.id)
return {
name
email
id: args.id,
}
}
即使您没有 id
字段,我们仍然可以将其包含在我们 return 的对象中。这样,我们可以将一些额外的信息(例如我们的参数)传递给任何子字段的解析器。然后,在你的 address
解析器中:
async (parent, args, context, info) => {
// `parent` contains `name`, `email` and `id` properties
return getAddress(parent.id)
}
我会添加(@daniel 回答)您可以在查询中明确传递此 ID(w/o address
解析器更改)。
userInfo (id: userId) {
name
email
address (userID: userId) {
street
country
}
}
为了使其(address
解析器)通用,我们可以使用两个参数源:
async (parent, args, context, info) => {
// `parent` (user) can contain `id` property
return getAddress(args.userID ? args.userID : parent.id)
}
因为您应该可以只查询地址(对于给定的 userId
),因为其余的 api.