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 端点