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

Joe*_*ing 2 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) => {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够将'id'或'email'传递给查询,但是,通过此设置,它需要传递id和电子邮件.

有没有办法设置查询所以只需要一个参数,无论是id还是电子邮件,但不是两者都有?

Dan*_*den 6

我不相信只有使用类型包装器(如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
}
Run Code Online (Sandbox Code Playgroud)