如何设置GraphQL查询,以便需要一个或另一个参数,但不能同时使用这两个参数

时间:2017-09-12 23:04:59

标签: graphql graphql-js

我刚刚掌握了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还是电子邮件,但不是两者都有?

2 个答案:

答案 0 :(得分:5)

我不相信只使用类型包装器(如GraphQLNonNull)就可以做到这一点。但是,您可以从两个参数中删除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
}

答案 1 :(得分:-1)

定义一个界面credentials,并将其实现为idemail