1

我正在尝试对整个应用程序的 apollo-link 处理程序中的数据进行变异:我想删除所有边缘/节点,以简化应用程序中数据的处理。

const consoleLink = new ApolloLink((operation, forward) => {
  return forward(operation).map((data) => {
    let data = getRidOfEdges(inData)
    return data
  })
})

当我尝试更改数据并返回数据的修改副本时,我的 vue 组件中的 apollo 处理程序会得到一个空的数据对象={}。我也尝试就地改变数据,但这也不起作用:vue 组件获取原始的不变data

apollo: {
  moduleQuery: {
    query: MODULE_DETAILS_QUERY,
    variables: {
      slug: 'video'
    },
    fetchPolicy: 'network-only',
    manual: true,
    result({data, loading, networkStatus}) {
        // after mutating data, I get
        // data == {}
    }

这种行为的解释是什么?以及如何实现 Apollo 链接以能够改变数据?这可能吗?

4

1 回答 1

1

如果客户端是 GraphQL 客户端并且期望数据根据 GraphQL 定义存在,它将转储任何不适合该模型的数据。如果您控制服务器,只需将节点数组添加到连接的根目录中。它不必只有 pageInfo 和边缘。如果你不这样做,你可以拼接一个并通过扩展这些类型来做同样的事情,然后你可以按摩数据。

如果生产者和消费者都遵循标准,那么实际上没有一种简单的方法可以在生产者和消费者之间进行数据操作,除非您进行拼接和转换,这会改变架构。在这种情况下,您可以拥有一个单独的端点,其中包含您自己的架构定义,将后端转换为您正在寻找的结构。

于 2018-08-29T19:53:53.257 回答