2016-03-01 19 views
5

Diciamo che sto cercando di creare una moto come una mutazioneGestione degli errori in mutazioni

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

Cosa succede quando non c'è abbastanza acciaio per loro ruote lucenti? Probabilmente avremo bisogno di un errore per il lato client. Come faccio a ottenere che a loro dal mio assistente graphQL con il seguito di mutazione:

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

E 'semplice come tornare un tipo di errore che il server/ho definito?

risposta

6

Non esattamente sicuro se questo è quello che dopo ...

Basta buttare un nuovo errore, dovrebbe restituire qualcosa come

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

vostro lato client deve solo gestire la risposta

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

Quello che faccio è passare un oggetto con errorCode e messaggio, in questa fase, il modo migliore per farlo è lo stringificarlo.

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

NOTA: anche voi potreste essere interessati a questa biblioteca https://github.com/kadirahq/graphql-errors

si può mascherare tutti gli errori (girare messaggio "Errore interno"), o definire userError ('messaggio al client'), che questi non saranno sostituiti.

+0

Grazie per aver scelto la libreria di errori graphql. –

+0

Haha, è così semplice! Grazie per la risposta chiara e [graphql-errors] (https://github.com/kadirahq/graphql-errors) –

+0

La norma restituisce sempre i messaggi localizzati direttamente dall'API piuttosto che le chiavi di errore che consentono al client di gestire la traduzione come fa piacere? – dSebastien