我如何设置 GraphQL 查询以便需要一个或另一个参数,但不是两个都需要

How do I set up GraphQL query so one or another argument is required, but not both

我刚刚开始掌握 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 中没有内置的方法来做到这一点。您需要使您的参数可以为空(通过从它们中删除 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
}

定义接口 credentials 并将其实现为 idemail