2017-01-18 5 views
0

Ich bin konzeptionell mit Graphsql (mit graphql-js) stecken.graphql Fehler und Statusmeldungen in graphql-js

Können sagen, das die API-Benutzer sendet eine Abfrage und die Datenbank-Server ausgefallen ist, und ich möchte diese Informationen als Fehler zurück in die in der

data { errors } 

Liste.

Wie kann ich auf das Fehlerobjekt in Daten zugreifen und meine eigenen Fehlermeldungen (z. B. über den Ausfall des Datenbankservers) dort hinschicken?

Als nächstes frage ich mich, wie man ein Add-Nachrichten-Objekt zum Datenobjekt hinzufügen kann.

Angenommen, der Benutzer hat ein Datenbankelement nach ID angefordert (z. B. ein bestimmtes Konto), und dieses Element ist nicht vorhanden. Nun würde Ich mag so etwas wie dies zurück:

{ 
    data: { 
     messages: [{status: "failure", message: "This account does not exist"}] 
    } 
} 

Wie würde ich das tun und ich habe, um die Nachrichten zu definieren auch als eine Art?

Antwort

0

Der einzige Weg, errors und messages Felder innerhalb der data Eigenschaft der GraphQL Antwort zu erscheinen zu bekommen, ist sie in der Art System Ihres GraphQL Schemas um und explizit vom Client für sie zu bitten. Wenn Sie jedoch ein benutzerdefiniertes Feld errors und messages haben möchten, das bei jeder Anforderung zurückgegeben wird, unabhängig davon, ob der Kunde sie angefordert hat oder nicht, können Sie sie außerhalb der data-Eigenschaft einschließen.

Zum Beispiel, wenn Sie express-graphql verwenden, es eine Erweiterungen Option bietet, die Sie anhängen überschüssige Informationen zu jeder Antwort-Payload (https://github.com/graphql/express-graphql/blob/c92cfad64f4b18abce3cdeca36bb8553dd020773/src/index.js#L95)

Wenn Sie nicht verwenden express-graphql erlaubt, können Sie es als ein schauen Beispiel, wie Sie Ihre eigenen Metadaten in jede Antwort aufnehmen können. express-graphql ist ein ziemlich einfacher Wrapper und Sie können immer nur Ihre eigenen Daten in die Antwort schreiben. Zum Beispiel ist dies die Zeile, in der express-graphqlerrors (https://github.com/graphql/express-graphql/blob/c92cfad64f4b18abce3cdeca36bb8553dd020773/src/index.js#L309) anfügt. Sie könnten das gleiche tun, aber unter einem anderen Schlüssel.

Viel Glück!

+0

In der Tat verwende ich Express-Graphql, also ist Ihre Antwort definitiv sehr nützlich. Danke, dass Sie sogar auf die jeweiligen Quellzeilen hingewiesen haben. Ich mag es. – LongHike

0

Eine Möglichkeit, errors und messages als Teil des Abfrageergebnisses zu haben, besteht darin, sie als Felder in Ihren GraphQL-Objekttyp (en) aufzunehmen.

Zum Beispiel haben Sie einen GraphQL-Objekttyp Item mit Feldern ID, Name, Fehlern und Nachrichten. Wenn der Datenbankserver inaktiv ist, wird nur das Feld errors des Exemplars gefüllt. Wenn ein Artikel mit der angegebenen ID nicht verfügbar ist, wird das Feld messages ausgefüllt. Wenn das Objekt verfügbar ist, wird das Namensfeld festgelegt.

+0

Ja, aber dann, um sie für den Client verfügbar zu machen, müsste der Client sie explizit als Teil der Abfrage anfordern. Bitte korrigieren Sie mich, wenn ich falsch liege. – LongHike

+0

Ja, der Kunde bekommt, was er will. –