Graphql 处理突变中的错误

Graphql 处理突变中的错误,graphql,graphql-js,Graphql,Graphql Js,比如说,我正试图创造一辆自行车作为一种变异 var createBike = (wheelSize) => { if (!factoryHasEnoughMetal(wheelSize)) { return supplierError('Not enough metal'); } return factoryBuild(wheelSize); } 如果没有足够的钢来装闪亮的车轮,会发生什么?客户端可能需要一个错误。我如何通过以下方式从graphQL服务器将其发送给他们

比如说,我正试图创造一辆自行车作为一种变异

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

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

不太确定这是否是您需要的

只要抛出一个新错误,它应该返回如下内容

{
  "data": {
    "createBike": null
  },
  "errors": [
    {
      "message": "Not enough metal",
      "originalError": {}
    }
  ]
}
您的客户端应该只处理响应

if (res.errors) {res.errors[0].message}
我所做的是传递一个带有错误代码和消息的对象,在这个阶段,最好的方法是将其字符串化

throw new Errors(JSON.stringify({
      code:409, 
      message:"Duplicate request......"
}))
注意:您也可能对这个库感兴趣


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

哈哈,这太简单了!感谢您提供了清晰的响应,并且通常是直接从API返回本地化消息,而不是让客户机随心所欲地处理翻译的错误密钥?