首页 > 解决方案 > Apollo GraphQL 客户端查询返回自省结果而不是数据

问题描述

我目前正在尝试通过使用Apollo作为GraphQL客户端从NextJS应用程序的Squidex API获取数据。On ,都在模式下,一切正常。localhostdev/production

Heroku上部署应用程序后,相同的查询返回自省模式作为结果,而不是预期的数据。在一个真实的例子中,通过运行如下查询:

{
    queryPageContents(search: "Home") {
      ...PagesFragmentsPageId
      data {
        ...PagesFragmentsPage
        ...PagesFragmentsHome
      }
    }
  }

  ${Pages.fragments.pageId}
  ${Pages.fragments.page}
  ${Pages.fragments.home}
}

基本上我在询问有关网页的各种数据,使用片段等。我的预期数据应该如下 - 例如localhost

在此处输入图像描述

但我在 Heroku 上收到了这个,而不是上面的:

在此处输入图像描述

因此,我的应用程序渲染失败,因为我的代码查找名为的 JSON 节点queryPageContents- 如第一个屏幕截图所示 - 但它当前__schema作为查询结果接收。所以这会导致500前端出错。

我四处搜索,发现这个graphql-disable-introspection必须安装在服务器端。我不知道它是否可以解决这个问题,但我不知道这是怎么发生的。

对此有何建议?

提前感谢大家。

标签: graphqlnext.jsapollo-client

解决方案


正如 Squidex 的 Sebastian Stehle 所注意到的,通过在数据加载检查之后推迟页面数据初始化,它解决了这个问题。在这样的 NextJS 场景中:

[...]
  const {loading, error, data} = useQuery(PAGE_QUERY.pages.home);
  // Instead here, pages it's being moved after error/loading checking as follows

  // Exception check
  if (error) {
    return <ErrorDb error={error} />
  }
  // DB fetching check
  if (loading) {
    return null;
  }

  // Data initialization here
  const pages = data.queryPageContents;

  return (
   // Page
   [...]
  );
[...]

推荐阅读