处理突变中的错误

时间:2016-03-01 03:03:31

标签: graphql graphql-js

让我们说我试图创造一辆自行车作为突变

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

是否像返回服务器/我定义的错误类型一样简单?

1 个答案:

答案 0 :(得分: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

感兴趣

你可以屏蔽所有错误(将消息转为“内部错误”),或者定义userError('消息给客户'),这些不会被替换。