Клиентский запрос Apollo GraphQL возвращает результат самоанализа вместо данных - PullRequest
1 голос
/ 18 октября 2019

В настоящее время я пытаюсь получить данные из API Squidex для приложения NextJS , используя Apollo в качестве GraphQL клиента,На localhost, как в режиме dev/production, все отлично работает.

После развертывания приложения на Heroku тот же запрос возвращает в качестве результата схему самоанализа вместо ожидаемых данных. На реальном примере, запустив запрос типа:

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

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

В основном я запрашиваю различные данные о веб-странице, используя фрагменты и так далее. Мои ожидаемые данные должны быть такими, как: localhost:

enter image description here

Но я получаю это на Heroku вместо вышеуказанного:

enter image description here

Из-за этого моему приложению не удается выполнить рендеринг, поскольку мой код ищет узел JSON с именем queryPageContents - как показано на первом снимке экрана -но в настоящее время он получает __schema как результат запроса. Так что это вызывает ошибку 500 на клиентском интерфейсе.

Я погуглил и обнаружил graphql-disable-introspection , который должен быть установлен на стороне сервера. Я не знаю, может ли это решить эту проблему, но я не понимаю, как это могло произойти.

Любой совет по этому поводу?

Спасибо всем заранее.

1 Ответ

0 голосов
/ 21 октября 2019

Как заметил Себастьян Стеле из Squidex, отложив инициализацию данных страницы после проверки загрузки данных, проблема, которую она решает. В сценарии 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
   [...]
  );
[...]
...