我如何设置 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
并将其实现为 id
或 email
。
我刚刚开始掌握 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
并将其实现为 id
或 email
。