了解 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 中服务器端的特定字段的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL了解一下?

了解 Sangria-graphql 执行器

通用服务,了解我是在 GRAPHQL 上下文还是 HTTP 上下文中?

前端工程师应该了解的 GraphQL

QLoo graphql engine了解

一文了解 REST 与 GraphQL 的优缺点