@Nuxt/Apollo 我如何从 gql 查询中删除“__typeName”

Bat*_*han 3 apollo vue.js nuxt.js

我正在开发 nuxt/apollo 包,但没有有关 addTypeName 属性的信息。这个属性应该在哪里设置呢?注意:所有安装都与@nuxt/apollo 有关。(作为模块等导入)

版本信息 :

"@nuxtjs/apollo": "^4.0.0-rc8",
Run Code Online (Sandbox Code Playgroud)

我在 nuxt.config.js 中的 apollo 配置:

    apollo: {
    includeNodeModules: false,
    authenticationType: 'Basic',
    defaultOptions: {
      $query: {
        loadingKey: 'loading',
        fetchPolicy: 'cache-and-network'
      }
    },
    clientConfigs: {
      default: {
        httpEndpoint: 'DEFAULT_GRAPHQL_ENDPOINT',
        tokenName: 'apollo-token' // optional
      },
      financial: {
        httpEndpoint: 'NEWS_GRAPHQL_ENDPOINT',
        tokenName: 'apollo-token',
        addTypename: false --> **Is not working**
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我的 Index.vue 页面是:

apollo: {
data: {
  query: gql`
    {
      newsJson(take: 1) {
        key
        *GENERATES __typeName when sending request to Graphql*
      }
    }
  `,
  client: 'financial'
}
}
Run Code Online (Sandbox Code Playgroud)

我的 graphql 查询(通过网络上的 graphiql):

{
  newsJson(take:1){
    key
    approve
  }
}
Run Code Online (Sandbox Code Playgroud)

响应

{
  "data": {
    "newsJson": [
      {
        "key": 2071554,
        "approve": false
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

当我发送请求 __typeName 时,我在 graphql Web 端崩溃了。如何防止添加__typeName属性来请求?

此致,

谢谢

Dan*_*den 6

InMemoryCache采用一个可选addTypename参数,可以设置该参数false来防止这种行为。所以你可以这样做:

clientConfigs: {
  default: {
     ...
     inMemoryCacheOptions: {
       addTypename: false,
     },
  },
}
Run Code Online (Sandbox Code Playgroud)

但是,非常不建议这样做。该__typename字段与id/_id字段一起用于生成缓存中单个节点的密钥。请参阅此处了解更多详细信息。删除__typename可能会导致应用程序出现错误和意外行为,因此不应该这样做。