如何在 api 服务器中包含字段并在将结果返回到 Graphql 中的客户端之前将其删除

Posted

技术标签:

【中文标题】如何在 api 服务器中包含字段并在将结果返回到 Graphql 中的客户端之前将其删除【英文标题】:How to include fields in api server and remove it before returning to results to client in Graphql 【发布时间】:2019-07-09 12:15:35 【问题描述】:

我有一个 Node.js GraphQL 服务器。从客户端,我尝试使用这样的查询获取所有用户条目:


    user 
        name
        entries 
            title
            body
        
    

在 Node.js GraphQL 服务器中,但是我想根据条目对象中的 publishDateexpiryDate 返回当前有效的用户条目。

例如:


    "user": "john",
    "entries": [
         
          "title": "entry1",
          "body": "body1",
          "publishDate": "2019-02-12",
          "expiryDate": "2019-02-13"
        ,
         
          "title": "entry2",
          "body": "body2",
          "publishDate": "2019-02-13",
          "expiryDate": "2019-03-01"
        ,
         
          "title": "entry3",
          "body": "body3",
          "publishDate": "2020-01-01",
          "expiryDate": "2020-01-31"
        
    ]

应该返回这个


    "user": "john",
    "entries": [
         
          "title": "entry2",
          "body": "body2",
          "publishDate": "2019-02-13",
          "expiryDate": "2019-03-01"
        
    ]

entries 是通过delegateToSchema 调用 (https://www.apollographql.com/docs/graphql-tools/schema-delegation.html#delegateToSchema) 获取的,我没有将 publishDate 和 expiryDate 作为查询参数传递的选项。本质上,我需要得到结果,然后在内存中过滤它们。

我面临的问题是原始查询中没有 publishDateexpiryDate 来支持这一点。有没有办法将这些字段添加到 delegateToSchema 调用中,然后在将它们发送回客户端时删除它们?

【问题讨论】:

【参考方案1】:

您正在寻找transformResult

实现细节是:

    在delegateToSchema,您需要定义transforms 数组。 在Transform,您需要定义transformResult 函数来过滤结果。 如果您能够将参数发送到远程 GraphQL 服务器,那么您应该使用 transformRequest

【讨论】:

嗨,加尔金。谢谢你的cmets。 transformRequest 正是我想要的!!! :)

以上是关于如何在 api 服务器中包含字段并在将结果返回到 Graphql 中的客户端之前将其删除的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce REST API 在搜索中包含属性或自定义字段

Spring Boot 在 json 中包含 ID 字段

RethinkDB:​​获取在任何字段中包含字符串的所有文档

如何在 swift 中包含多个功能的完成处理程序?

如何使用 jest 在 javascript 中测试 try catch 代码并在 express 中包含带有中间件的 next() 调用?

如何在线性布局中设置视图,使其适合从开始到结束的屏幕,并在一行中包含一定数量的元素?