Apollo GraphQL 客户端查询 returns 自省结果而不是数据
Apollo GraphQL client query returns introspection result instead of data
我目前正在尝试从 Squidex API 获取数据,用于 NextJS 应用程序,使用 Apollo 作为 GraphQL 客户端。
在 localhost
上,在 dev/production
模式下,一切正常。
在 Heroku 上部署应用程序后,相同的查询 returns 内省模式作为结果,而不是预期的数据。在一个真实的例子中,通过 运行 查询,如:
{
queryPageContents(search: "Home") {
...PagesFragmentsPageId
data {
...PagesFragmentsPage
...PagesFragmentsHome
}
}
}
${Pages.fragments.pageId}
${Pages.fragments.page}
${Pages.fragments.home}
}
基本上我是在询问有关网页的各种数据,使用片段等。
我的预期数据应该如下 - 例如 localhost
:
但我是在 Heroku 上收到这个而不是上面的:
因此,我的应用程序渲染失败,因为我的代码查找名为 queryPageContents
的 JSON 节点 - 如第一个屏幕截图所示 - 但它目前正在接收 __schema
作为查询结果。所以这会导致前端出现 500
错误。
我用谷歌搜索了一下,发现这个 graphql-disable-introspection 必须安装在服务器端。我不知道它是否可以解决这个问题,但我不明白这是怎么发生的。
对此有何建议?
先谢谢大家了。
正如 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
[...]
);
[...]
我目前正在尝试从 Squidex API 获取数据,用于 NextJS 应用程序,使用 Apollo 作为 GraphQL 客户端。
在 localhost
上,在 dev/production
模式下,一切正常。
在 Heroku 上部署应用程序后,相同的查询 returns 内省模式作为结果,而不是预期的数据。在一个真实的例子中,通过 运行 查询,如:
{
queryPageContents(search: "Home") {
...PagesFragmentsPageId
data {
...PagesFragmentsPage
...PagesFragmentsHome
}
}
}
${Pages.fragments.pageId}
${Pages.fragments.page}
${Pages.fragments.home}
}
基本上我是在询问有关网页的各种数据,使用片段等。
我的预期数据应该如下 - 例如 localhost
:
但我是在 Heroku 上收到这个而不是上面的:
因此,我的应用程序渲染失败,因为我的代码查找名为 queryPageContents
的 JSON 节点 - 如第一个屏幕截图所示 - 但它目前正在接收 __schema
作为查询结果。所以这会导致前端出现 500
错误。
我用谷歌搜索了一下,发现这个 graphql-disable-introspection 必须安装在服务器端。我不知道它是否可以解决这个问题,但我不明白这是怎么发生的。
对此有何建议?
先谢谢大家了。
正如 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
[...]
);
[...]