如何设置 GraphQL 查询,以便需要一个或另一个参数,但不是两者都需要
Posted
技术标签:
【中文标题】如何设置 GraphQL 查询,以便需要一个或另一个参数,但不是两者都需要【英文标题】:How do I set up GraphQL query so one or another argument is required, but not both 【发布时间】:2018-02-21 12:20:50 【问题描述】:我刚刚开始掌握 GraphQL,
我设置了以下查询:
type: UserType,
args:
id: name: 'id', type: new GraphQLNonNull(GraphQLID) ,
email: name: 'email', type: new GraphQLNonNull(GraphQLString)
,
resolve: (root, id, email , db: User , fieldASTs) =>
...
我希望能够将“id”或“email”传递给查询,但是,通过此设置,它需要同时传递 id 和电子邮件。
有没有办法设置查询,因此只需要一个参数,id 或 email,但不能同时使用?
【问题讨论】:
github.com/graphql/graphql-js/blob/master/src/__tests__/… 【参考方案1】:GraphQL 中没有内置的方法可以做到这一点。您需要使您的参数可以为空(通过从它们中删除 GraphQLNonNull
包装器类型),然后在您的解析器中,您可以进行如下检查:
resolve: (root, id, email , db: User , fieldASTs) =>
if (!id && !email) return Promise.reject(new Error('Must pass in either an id or email'))
if (id && email) return Promise.reject(new Error('Must pass in either an id or email, but not both.'))
// the rest of your resolver
【讨论】:
【参考方案2】:定义一个接口credentials
并将其实现为id
或email
。
【讨论】:
输入类型不能实现接口以上是关于如何设置 GraphQL 查询,以便需要一个或另一个参数,但不是两者都需要的主要内容,如果未能解决你的问题,请参考以下文章
如何在 graphQL 中编写 JOIN 或从多种类型中获取结果 - AWS App sync iOS
根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427