如何使用变量选择GraphQL对象的嵌套查询返回字段
解决方案
GraphQL原生不支持将字段选择集作为查询变量直接传入,可通过以下两种方式实现动态字段选择需求:
方案1:使用GraphQL片段(推荐)
片段是GraphQL官方提供的可复用字段选择逻辑单元,适合固定可枚举的动态字段场景:
- 先定义可复用的字段片段:
fragment userNameField on User { name { firstName } }
- 在查询语句中引用片段即可:
query getUser($userId: ID!) { user(id: $userId) { ...userNameField # 可同时叠加其他字段或其他片段 } }
如果需要切换不同的返回字段,只需要定义多个片段,按需引用对应片段即可。
方案2:动态拼接查询字符串
如果你的字段选择逻辑是完全动态生成的,可以在业务代码中拼接gql模板字符串实现:
// 自定义存储字段选择逻辑 const selectFields = ` name { firstName } ` // 拼接生成完整查询语句 const userQuery = gql` query getUser($userId: ID!) { user(id: $userId) { ${selectFields} } } `
注意:该方案存在注入风险,需确保动态拼接的字段内容完全可控,不要直接使用未校验的用户输入内容拼接。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

