2017-09-12 52 views
1

我刚开始与GraphQL交手,我如何设置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和电子邮件传递。

有没有一种方法来设置查询,以便只需要一个参数,或者ID或电子邮件,但不能两者兼而有之?

+0

https://github.com/graphql/graphql-js/blob/master/src/__tests__/starWarsSchema.js – bf2020

回答

3

我不相信有办法做到这一点只用型包装(如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 
} 
0

定义一个接口credentials并具有实现为idemail

+0

输入类型无法实现接口 –

相关问题