web-dev-qa-db-fra.com

Apollo Client (React): gestion des erreurs inattendues

J'ai examiné la documentation Apollo mais je ne vois pas d'informations sur la manière de traiter les erreurs de serveur dans le client Apollo.

Par exemple, supposons que le serveur soit:

  • Le temps est écoulé
  • Devient inaccessible
  • Échoue de façon inattendue

Comment cela devrait-il être géré dans le client? Apollo échoue actuellement avec des erreurs telles que:

Unhandled (in react-apollo) Erreur: erreur GraphQL: impossible ...

Je voudrais éviter que cela se produise et gérer ces erreurs. Comment puis-je le faire en utilisant React Apollo?


Pour référence:

J'utilise actuellement React-Apollo et Redux.

17
dipole_moment

Les erreurs sont transmises dans le champ error de vos accessoires de composant: http://dev.apollodata.com/react/api-queries.html#graphql-query-data-error

function MyComponent({ data }) {
  if (data.error) {
    return <div>Error!</div>;
  } else {
    // ...
  }
}

export default graphql(gql`query { ... }`)(MyComponent);

Ce message est imprimé si nous détectons une erreur et que le champ error n'a pas été utilisé dans le composant.

Vous pouvez écrire un composant d'ordre supérieur pour traiter les erreurs de manière générique, afin de pouvoir envelopper tous vos composants avec cela.

6
stubailo

Un erreur de serveur pourrait signifier qu'il n'y a pas d'objet de données provenant du serveur, donc il n'y a pas non plus de message d'erreur disponible.

Supposons que vous interrogiez certaines données utilisateur pour que l'objet du résultat soit data.user. Ensuite, vous voulez tester:

if (data.loading !== true && data.user === undefined) {
   /* handle the error here */
}

Si vous ne voulez pas voir les messages d'erreur, vous pouvez ajouter des options à votre requête:

graphql(query, {
  options: {
    errorPolicy: 'ignore'
  }
})
0
Miro Lehtonen