Actualmente estoy tratando de obtener datos de la API de Squidex para una aplicación NextJS , usando Apollo como GraphQL cliente. En localhost, ambos en modo dev/production, todo funciona bien.

Después de implementar la aplicación en Heroku , la misma consulta devuelve el esquema de introspección como resultado, en lugar de los datos esperados. En un ejemplo real, ejecutando una consulta como:

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

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

Básicamente, estoy preguntando varios datos sobre una página web, usando fragmentos, etc. Mis datos esperados deberían ser los siguientes, como en localhost:

enter image description here

Pero estoy recibiendo esto en Heroku en lugar del anterior:

enter image description here

Debido a esto, mi aplicación falla en su procesamiento porque mi código busca un nodo JSON llamado queryPageContents, como se muestra en la primera captura de pantalla, pero actualmente está recibiendo __schema como resultado de la consulta. Entonces esto causa un error 500 en el front-end.

Busqué en Google y encontré esta graphql-disable-introspection que debe ser instalado en el lado del servidor. No sé si podría resolver este problema, pero no entiendo cómo podría suceder esto.

¿Algún consejo sobre esto?

Gracias a todas por adelantado.

1
Luca Cattide 18 oct. 2019 a las 11:34

1 respuesta

La mejor respuesta

Como notó Sebastian Stehle de Squidex, al diferir la inicialización de los datos de la página después de una verificación de carga de datos, el problema se resolvió. En un escenario de NextJS como este:

[...]
  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
   [...]
  );
[...]
0
Luca Cattide 21 oct. 2019 a las 08:53