2016-03-01 5 views
5

Sagen wir, ich bin versucht, ein Fahrrad als eine MutationUmgang mit Fehlern in Mutationen

var createBike = (wheelSize) => { 
    if (!factoryHasEnoughMetal(wheelSize)) { 
    return supplierError('Not enough metal'); 
    } 
    return factoryBuild(wheelSize); 
} 

Was zu schaffen passiert, wenn für sie da glänzende Räder nicht genug Stahl ist? Wir werden wahrscheinlich einen Fehler für die Client-Seite benötigen. Wie erhalte ich, dass sie von meinem graphQL Server mit dem folgenden Mutation:

// Mutations 
mutation: new graphql.GraphQLObjectType({ 
    name: 'BikeMutation', 
    fields:() => ({ 
    createBike: { 
     type: bikeType, 
     args: { 
     wheelSize: { 
      description: 'Wheel size', 
      type: new graphql.GraphQLNonNull(graphql.Int) 
     }, 
     }, 
     resolve: (_, args) => createBike(args.wheelSize) 
    } 
    }) 
}) 

Ist es so einfach wie einiger Fehlertypen Rückkehr, die der Server/I definiert hat?

Antwort

6

Nicht ganz sicher, ob dies ist, was nach ...

einfach einen neuen Fehler werfen, sollte es so etwas wie

{ 
    "data": { 
    "createBike": null 
    }, 
    "errors": [ 
    { 
     "message": "Not enough metal", 
     "originalError": {} 
    } 
    ] 
} 

Ihre Client-Seite zurückkehren sollte nur die Antwort handhaben

if (res.errors) {res.errors[0].message} 

Ich übergebe ein Objekt mit errorCode und Nachricht, in diesem Stadium ist der beste Weg zu tun, es zu stringifizieren.

throw new Errors(JSON.stringify({ 
     code:409, 
     message:"Duplicate request......" 
})) 

HINWEIS: auch Sie könnten an dieser Bibliothek interessiert sein https://github.com/kadirahq/graphql-errors

Sie alle Fehler maskieren (drehen Meldung „Internal Error“), oder definieren Usererror (‚Nachricht an den Client‘), die Diese werden nicht ersetzt.

+0

Vielen Dank, dass Sie auf die Bibliothek graphql-errors zeigen. –

+0

Haha, es ist so einfach! Danke für die klare Antwort und [graphql-errors] (https://github.com/kadirahq/graphql-errors) –

+0

Ist die Norm, lokalisierte Nachrichten immer direkt aus der API zurückzugeben, anstatt Fehlerschlüssel, die den Client die Übersetzung als behandeln lassen es gefällt mir? – dSebastien