2017-01-20 2 views
0

Привет Я пытаюсь выяснить, как обрабатывать ошибки пользователя с помощью graphql и relay при выполнении мутаций.GraphQL, Relay: Обработка ошибок

Это моя реализация graphql для мутации CreateUser:

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

Я был в состоянии получить ошибку, используя 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 
      } 
      } 
     ` 
     ] 
    }]; 
    } 
} 
Смежные вопросы