如何在全球范围内捕获和修改阿波罗响应?

时间:2019-08-21 17:36:46

标签: graphql apollo react-apollo apollo-client vue-apollo

是否有一种动态捕捉和修改全局响应的方法?我可以对以下一个查询执行此操作,但是我想对所有查询执行此操作。

apollo: {
    post: {
        query: Post,
        update(data) {
            return data.map(item => Object.assign(item, {foo: 'bar'})
        }
    }
}

此问题已简化,但在幕后,我想将构造函数(类)应用于所有对象...

我正在使用nuxt-apollo。我在clientConfig或其他地方搜索了一种方法,因此解决方案可能与阿波罗有关。

感谢您的建议!

修改: 好的,我发现使用apollo-link可以做到这一点,但是我无法修改响应。这里的代码:

const constructorMiddleware = new ApolloLink((operation, forward) => {
    return forward(operation).map(response => {
      Object.keys(response.data).map(key => {
        if (!Array.isArray(response.data[key])) return;
        const newResponse = response.data[key].map(item => {
          return item.__typename === 'post'
            ? Object.assign(item, { foo: 'bar' })
            : item
        })
        console.log(newResponse)
        response.data[key] = newResponse
      })
      return response
    })
  })

我可以在newResponse中看到foo: bar,但是nuxt-apollo返回的graphql不包含这个newResponse,而只是原始的。 ApolloLink是否覆盖响应?阿波罗缓存会改变这一点吗?

修改2 : 我尝试进行chain links,并且下一个链接中很好地显示了ConstructorMiddleware的newResponse。因此问题似乎出自nuxt-apollo或更多的vue-apollo ...

0 个答案:

没有答案