2016-03-01 17 views
5

突然変異としての私は自転車を作成しようとしているとしましょうエラー処理

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

十分な鋼は、それらの光沢のあるホイールのためにそこにないときはどうなりますか?クライアント側にはおそらくエラーが必要です。私は私のgraphQLサーバーからそれらにどのようにすることを得るのですか突然変異以下:

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

それは、サーバ/ Iが定義されているいくつかのエラーの種類を返すのと同じくらい簡単ですか?

答えて

6

ない、これはあなたが後に...

ちょうど新しいエラーをスローするものであれば、それはあなたのクライアント側だけで応答

if (res.errors) {res.errors[0].message} 
を処理する必要があり

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

のようなものを返す必要があります正確に確認してください

私はerrorCodeとmessageでオブジェクトを渡しています。この段階では、文字列化するのが最善の方法です。

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

注:また、あなたはすべてのエラーを(「内部エラー」にメッセージを回す)マスク、またはuserError(「クライアントへのメッセージ」)を定義することができhttps://github.com/kadirahq/graphql-errors

このライブラリでは興味があるかもしれません、これらは置き換えられません。

+0

graphql-errorsライブラリをご利用いただきありがとうございます。 –

+0

母、それはとても簡単です!明確な応答と[graphql-errors](https://github.com/kadirahq/graphql-errors)のおかげで –

+0

クライアントが翻訳を次のように処理するエラーキーではなく、APIから直接ローカライズされたメッセージを返しますそれは喜ぶ? – dSebastien