【问题标题】:How do I set up GraphQL query so one or another argument is required, but not both如何设置 GraphQL 查询,以便需要一个或另一个参数,但不是两者都需要
【发布时间】: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,但不能同时使用?

【问题讨论】:

标签: graphql graphql-js


【解决方案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 并将其实现为idemail

    【讨论】:

    • 输入类型不能实现接口
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多