如何用GraphQL实现条件查询:传地址返回Account,否则返回认证用户
实现带条件分支的GraphQL查询逻辑
要实现你描述的“传参查列表、不传参返回当前用户”的逻辑,需要从参数定义和解析逻辑两方面调整:
1. 修改查询字段的参数可选性
原查询里address: String!是必填约束,必须去掉!让参数可选,这样才能支持不传参数的场景:
accountByAddress(address: String @where(operator: "like")): [Account!]! @all
2. 在Resolver层编写分支逻辑
GraphQL的Resolver是处理动态逻辑的核心,这里需要根据是否传入address参数执行不同查询。以下是伪代码示例(以JS/TS环境为例):
async function accountByAddress(parent, { address }, context) { if (address) { // 传入address时,执行模糊查询返回Account列表 return context.db.Account.find({ where: { address: { like: `%${address}%` } } }); } else { // 未传address时,返回当前已认证用户(需确保context中已注入用户信息) const currentUser = context.auth.currentUser; // 注意字段返回类型是数组,所以要把单个用户包装成数组 return [currentUser]; } }
3. 关键注意点
- 认证上下文:确保你的GraphQL服务已经通过中间件(比如JWT解析)把当前用户信息注入到
context中,否则无法获取当前认证用户 - 框架适配:如果使用Hasura这类带自定义指令的框架,原
@where指令可能无法兼容动态分支逻辑,建议直接在Resolver中编写数据库查询逻辑替代指令 - 类型一致性:当前用户的结构必须严格匹配
Account类型,避免返回时出现类型校验错误
内容的提问来源于stack exchange,提问作者AHMED IMTIAZ KHAN
相关产品推荐
相关产品推荐

