2016-03-01 42 views
5

powiedzmy Próbuję stworzyć rower jako mutacjaobsługi błędów w mutacji

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

Co się dzieje, gdy nie wystarczy dla nich stal błyszczące koła? Prawdopodobnie będziemy potrzebować błędu po stronie klienta. Jak mogę dostać się do nich, że z mojego serwera graphQL z mutacją poniżej:

// 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) 
    } 
    }) 
}) 

Czy to tak proste, jak wracając jakiś rodzaj błędu, który serwer/Mam zdefiniowane?

Odpowiedz

6

Nie dokładnie pewien, czy to jest to, czego po ...

Wystarczy rzucić nowy błąd, powinien on powrócić coś jak

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

swojej stronie klienta powinna obsługiwać tylko odpowiedź

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

To, co robię, to przekazywanie obiektu z errorCode i komunikatem, na tym etapie najlepszym sposobem jest jego uszeregowanie.

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

UWAGA: również może być zainteresowany w tej bibliotece https://github.com/kadirahq/graphql-errors

można zamaskować wszystkie błędy (turn wiadomość „Błąd wewnętrzny”), lub zdefiniować userError („wiadomość do klienta”), który te nie zostaną wymienione.

+0

Dziękujemy za wskazanie biblioteki błędów programu GraphQL. –

+0

Haha, to takie proste! Dziękuję za jasną odpowiedź i [błędy grafql] (https://github.com/kadirahq/graphql-errors) –

+0

Czy normą jest zawsze zwracać zlokalizowane komunikaty bezpośrednio z interfejsu API, a nie klucze błędów, pozwalające klientowi traktować tłumaczenie jako to się podoba? – dSebastien