2017-01-20 7 views
0

こんにちは私は、どのように突然変異を実行するとgraphqlとリレーでユーザーエラーを処理するかを考えようとしています。 createUser変異のための私のgraphql実装です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]しかし、私はより良いエラータイプを返すアプローチが好きだと思いますが、私はそれを働かせるために何か助けてください

答えて

0

FIELDS_CHANGEの代わりにREQUIRED_CHILDREDを使用してエラーが発生しました。私は

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 
      } 
      } 
     ` 
     ] 
    }]; 
    } 
} 
をやってしまったものだ