首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿波罗客户端查询__typename缺失字段​

阿波罗客户端查询__typename缺失字段​
EN

Stack Overflow用户
提问于 2018-11-15 18:28:11
回答 2查看 8.7K关注 0票数 3

我试图在星球大战API中使用apollo-link-rest,而且我也遇到了一些错误。

代码语言:javascript
复制
import { InMemoryCache } from "apollo-cache-inmemory";
import { ApolloClient } from "apollo-client";
import { RestLink } from "apollo-link-rest";
import gql from "graphql-tag";

// node environment?
const fetch = require("node-fetch");
global.fetch = fetch;
global.Headers = fetch.Headers;

const restLink = new RestLink({
  endpoints: { swapi: "https://swapi.co/api/" }
});

const client = new ApolloClient({
  link: restLink,
  cache: new InMemoryCache()
});

const query = gql`
  query people {
    search
      @rest(type: "Search", path: "people/?search=skywalker", endpoint: swapi) {
      count
      results {
        name
      }
    }
  }
`;

client
  .query({ query })
  .then(response => console.log(JSON.stringify(response)))
  .catch(err => console.log(err));

错误:

代码语言:javascript
复制
​​​Missing field __typename in {​​​
​​​  "name": "Luke Skywalker"​​​
​​​}​​​
​​​​​​
​​​Missing field __typename in {​​​
​​​  "name": "Anakin Skywalker"​​​
​​​}​​​
​​​​​​
​​​Missing field __typename in {​​​
​​​  "name": "Shmi Skywalker"​​​
​​​}​​​

我知道我可以更改设置这个InMemoryCache({ addTypename: false })以删除错误,但我不知道如果我将addTypename设置为false,对缓存的影响是什么。

有人能为我指出正确的方向吗?

干杯!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-15 19:31:57

看看文档对类型名称修补有什么看法。

您的@rest指令告诉客户端search字段的类型名称,但没有提到字段选择集中的任何类型。有两种方法可以解决这个问题。您可以使用@type指令:

代码语言:javascript
复制
query people {
  search @rest(type: "Search", path: "people/?search=skywalker", endpoint: swapi) {
    count
    results @type(name: "Person") {
      name
    }
  }
}

或者配置一个typePatcher。类似于:

代码语言:javascript
复制
const restLink = new RestLink({
  uri: 'https://swapi.co/api/',
  typePatcher: {
    Search: (data, outerType, patchDeeper) => {
      if (data.results != null) {
        data.results = data.results.map(person => {
          return {__typename: "Person", ...person }
        });
      }
      return data
    },
  },
})
票数 4
EN

Stack Overflow用户

发布于 2021-07-07 20:21:25

更一般的答案:

为了避免missing __typename错误,请确保GQL模型中的任何数组对数组中的每个对象都有相应的字段__typename

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53325787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档