我刚刚掌握了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还是电子邮件,但不是两者都有?
答案 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
,并将其实现为id
或email
。