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

サーバー/私が定義したエラータイプを返すのと同じくらい簡単ですか?

4

1 に答える 1

7

これがあなたが求めているものかどうかは正確にはわかりません...

新しいエラーをスローするだけで、次のようなものが返されます

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

クライアント側は応答を処理するだけです

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

私がやっていることは、errorCode とメッセージを含むオブジェクトを渡すことです。この段階では、オブジェクトを文字列化するのが最善の方法です。

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

注: このライブラリにも興味があるかもしれませんhttps://github.com/kadirahq/graphql-errors

すべてのエラーをマスクする (メッセージを "Internal Error" に変える) か、userError('クライアントへのメッセージ') を定義することができますが、これらは置き換えられません。

于 2016-04-05T16:29:54.073 に答える