GraphQL,中继:处理错误

Posted

技术标签:

【中文标题】GraphQL,中继:处理错误【英文标题】:GraphQL, Relay: Handling errors 【发布时间】:2017-06-05 22:08:16 【问题描述】:

您好,我正在尝试弄清楚如何在执行突变时使用 graphql 和中继处理用户错误。

这是我对 createUser 突变的 graphql 实现:

mutationWithClientMutationId(
  name: 'CreateUser',
  inputFields: 
    email:  type: new GraphQLNonNull(GraphQLString) ,
  ,
  outputFields: 
    user:  type: userType ,
    error: type: errorType,
  ,
  mutateAndGetPayload: async (attrs,  viewer ) => 
    try 
      // Try to create a user
     catch(err) 
      // err.toObject has the shape required by the error type
      return  error: err.toObject() ;
    
  
);

这是我的中继突变类

class CreateUserMutation extends Relay.Mutation 
  getMutation() 
    return Relay.QL`mutation  createUser `;
  

  getVariables() 
    return 
      email: this.props.email,
    ;
  

  getFatQuery() 
    return Relay.QL`
      fragment on CreateUserPayload 
        error
      
    `;
  

  getConfigs() 
    return [
      type: "FIELDS_CHANGE",
      fieldIDs: 
        error: ????,
      
    ];
  

我还尝试了另一种方法,即不捕获 graphql 中的错误,并在执行中继突变时监听 onFailure,但我不得不做类似的事情来得到我的错误return error.getError().source.errors[0],但我想我喜欢这种方法更好地返回错误类型,但我无法让它工作,请提供任何帮助

【问题讨论】:

【参考方案1】:

我能够使用REQUIRED_CHILDRED 而不是FIELDS_CHANGE 得到错误。

这就是我最终做的事情

class CreateUserMutation extends Relay.Mutation 
  getMutation() 
    return Relay.QL`mutation  createUser `;
  

  getVariables() 
    return 
      email: this.props.email,
    ;
  

  getFatQuery() 
    return Relay.QL`
      fragment on CreateUserPayload 
        error
      
    `;
  

  getConfigs() 
    return [
      type: "REQUIRED_CHILDREN",
      children: [
        Relay.QL`
          fragment on CreateUserPayload 
            error 
              message
            
          
        `
      ]
    ];
  

【讨论】:

以上是关于GraphQL,中继:处理错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试从反应应用程序连接到 graphcool 中继 API 时出现此错误:模块构建失败:错误:没有有效的 GraphQL 端点

未处理的 GraphQL 订阅错误

中继编译器 12 + graphql 16 = 无效的 AST 节点

Apollo GraphQL 错误处理

如何在 GraphQL 中处理错误并发送响应

Apollo GraphQL 本地和全局错误处理