了解 GraphQL / Sangria-Graphql 中服务器端的特定字段
Posted
技术标签:
【中文标题】了解 GraphQL / Sangria-Graphql 中服务器端的特定字段【英文标题】:Know specified fields on serverside in GraphQL / Sangria-Graphql 【发布时间】:2017-06-24 14:17:30 【问题描述】:当客户端发送请求时,我想知道客户端请求数据的字段是什么。例如,
user
name
address
在上述请求中,客户端请求了用户的name
字段和address
字段。在执行查询时,我如何知道/获取这些指定字段,即 sangria-graphql 服务器中的名称和地址?
【问题讨论】:
【参考方案1】:你必须在resolve()
中使用4th
参数
resolve: (obj, args, auth, fieldASTs) =>
/* all your fields are present in selections
please check the fieldASTs JSON path it may vary if you are using relay
connections */
const requiredFields = fieldASTs.fieldNodes[0].selectionSet.selections.map(
(set) => set.name.value
);
// requiredFields will contain the name and address
/* fieldASTs contains fieldNames, fieldNodes and every details about your Schema
you can get your specified fields inside fieldNodes like */
【讨论】:
是graphql-js吧?你能告诉我如何用 sangria-graphql 达到同样的效果吗?不管怎样,我会试着用桑格利亚汽酒来解决这个问题。谢谢。 好的,我刚刚想通了。我已将 QueryType 字段中的代码修改为resolve = c => c.astFields.head.selections.map(fld => println(fld.renderCompact));
。谢谢。
太好了。快乐编码
@ra-ka @p0k8_ 虽然可以直接使用 AST,但它的参与度要高得多,因为您还需要考虑诸如内联片段、散布、@include
和 @skip
之类的事情指令等。您还需要考虑所有fieldNodes
/astFields
而不仅仅是第一个。在桑格利亚汽酒中,我建议您为此使用预测,它考虑了我上面描述的所有内容:sangria-graphql.org/learn/#projections
@tenshi 使用投影比我以前使用的要有效得多。例如我可以提供景深等。顺便说一句,您的链接示例对我帮助很大。谢谢。以上是关于了解 GraphQL / Sangria-Graphql 中服务器端的特定字段的主要内容,如果未能解决你的问题,请参考以下文章