2017-01-25 3 views
10

Ich verwende den Apollo-Stapel mit graphql-server-express und apollo-client.Wie man Fehler mit dem Apollo-Stapel behandelt

Da mein Backend nicht perfekt ist, können Fehler auftreten und daher muss ich auf eine Anfrage mit einem Fehler für diesen Pfad antworten.

Bis jetzt war mein Hauptproblem die Authentifizierung und deshalb habe ich mit einem Fehler geantwortet.

Im Frontend verwende ich einen Apollo-Client, um Daten abzufragen.

return apollo 
     .query({query: gql` 
      query { 
       ${query} 
      }`, 
      forceFetch: forceFetch 
     }) 
     .then(result => { debugger; return result.data }) 
     .catch(error => { debugger; console.error(error); }); 

Wenn jedoch eine Eigenschaft der Abfrage mit einem Fehler antwortet, wird nur die catch-Funktion aufgerufen. Auch die Daten der verbleibenden Eigenschaften werden übertragen, ich sehe dies in der Netzwerk-Registerkarte der Chrome Dev Tools. In ist kein Fehlerobjekt in der Fangfunktion.

Mein Versuch funktioniert gut mit GraphiQL, wo ich die Fehler und Daten im selben Objekt bekomme.

Also, wie kann ich Fehler für eine Eigenschaft werfen, ohne die gesamte Anfrage zu verlieren?

Antwort

0

Sie könnten manuell nach result.error im then Teil Ihres Versprechens suchen und die Verwendung von catch vermeiden. Auch Ich denke, Sie könnten auch eine then nach dem catch Anruf hinzufügen, um diesen speziellen Fall zu behandeln.

Zusätzlich können Sie in Ihrem GraphQL-Server auch formatError verwenden, um Fehlermeldungen manuell zu filtern und zu formatieren. Der Körper dieser Funktion ist der folgende, und Sie haben Zugriff auf den geworfenen Error.

formatError: (error) => { 
    return { 
    name: error.name, 
    mensaje: error.message 
    } 
} 
Verwandte Themen