1

我正在学习django-graphene用于 graphql 目的。

对于突变,我所知道的是它会返回自己的错误消息。假设我有一个令牌字段,并检查令牌字段是否错误,我只知道如何为return None前端提供查询结果,null而不是针对状态和错误的自定义 json 响应

我有这些代码

class ProductType(DjangoObjectType):
    class Meta:
        model = Product
        filter_fields = {'description': ['icontains']}
        interfaces = (graphene.relay.Node,)


class ProductInput(graphene.InputObjectType):
    token = graphene.String()
    title = graphene.String()
    barcode = graphene.String(required=True)


class CreateProduct(graphene.Mutation):
    class Arguments:
        product_input = ProductInput()

    product = graphene.Field(ProductType)

    def mutate(self, info, product_input=None):
        if not product_input.get('token'):
            return None  # instead of return None, I would like to return error code, status with message
        product = Product.objects.create(barcode=product_input.barcode, title=product_input.title)

        return CreateProduct(product=product)


class ProductMutation(graphene.ObjectType):
    create_product = CreateProduct.Field()

提前致谢

4

1 回答 1

2

而不是return None你可以抛出异常。异常将由石墨烯处理并作为错误传递。

例如,raise Exception('Error 123456')将导致类似的响应

{
  "errors": [
    {
      "message": "Error 123456'",
      "locations": [
        {
          "line": 1,
          "column": 3
        }
      ]
    }
  ],
  "data": {
    "product": null
  }
}

errors输出 JSON 中的存在可以触发前端错误处理。

请注意,一般情况下,传递给 graphql 的任何异常对外界都是可见的,因此值得考虑所有石墨烯查询和突变异常的安全后果。

于 2017-12-11T21:34:10.127 回答