如何在GraphQL查询中让返回的指定字段以列表形式输出
GraphQL返回字段转列表格式实现方法
方案1:修改Schema字段定义(最简适配)
直接将Identity类型中需要返回列表的字段类型从String调整为[String],同时在Resolver中加工返回结构即可,原有查询语句无需修改。
修改后的类型定义:
type Identity{ First: [String], Last: [String], Age: [String] } # 根查询定义无需改动 getIdentityDetails:[Identity]
调整后的Resolver逻辑:
getIdentityDetails: async () =>{ try { const identity = await Identity_Table.findAll(); // 遍历结果将单个字段值包装为数组 return identity.map(item => ({ First: [item.First], Last: [item.Last], Age: [item.Age] })) }catch(err){ console.log(err); } },
使用原有查询语句即可得到期望的返回格式:
{ getIdentityDetails { First Last Age } }
方案2:字段级参数控制(兼容多场景)
如果需要保留原有单值返回能力,可通过给字段增加控制参数的方式实现按需返回列表格式,无需改动根查询逻辑。
调整后的类型定义:
type Identity{ # 增加asList参数,默认关闭返回列表 First(asList: Boolean = false): [String] Last(asList: Boolean = false): [String] Age(asList: Boolean = false): [String] } getIdentityDetails:[Identity]
新增字段级Resolver:
// 根查询Resolver无需改动 getIdentityDetails: async () =>{ try { return await Identity_Table.findAll(); }catch(err){ console.log(err); } }, // 新增Identity类型的字段解析逻辑 Identity: { First: (parent, { asList }) => asList ? [parent.First] : parent.First, Last: (parent, { asList }) => asList ? [parent.Last] : parent.Last, Age: (parent, { asList }) => asList ? [parent.Age] : parent.Age }
需要返回列表时,查询语句携带参数即可:
{ getIdentityDetails { First(asList: true) Last(asList: true) Age(asList: true) } }
内容的提问来源于stack exchange,提问作者franco_on_mars
相关产品推荐
相关产品推荐

