我为我的用户查询设置了以下架构:
{
type: UserType,
args: {
id: {
type: GraphQLID,
description: "A user's id.",
},
email: {
type: GraphQLString,
description: "A user's email.",
},
},
resolve: async (parent, args) => {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想同时接受id和email作为参数,但至少需要一个。有没有办法在模式中设置它,而不必在解析函数中编写额外的代码?
还是建议为每个参数创建单独的查询?例如:getUserById,getUserByEmail,getUserBySessionToken,等?
我认为使用解析功能的最简单方法。但为什么你认为它会很乱?
try {
if(!args.id && !args.email) {
throw new Error('Specify id or email');
}
...
} catch(e) {
return Promise.reject(e);
}
Run Code Online (Sandbox Code Playgroud)
如果您想要一个强制执行两者之一的架构,您可以添加一个 enum 参数来限定单个字符串参数。graphql 中的模式可能如下所示:
type query {
getUser(
lookup: String!
lookupType: UserLookupType!
): User
}
enum UserLookupType {
ID
EMAIL
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4795 次 |
| 最近记录: |