如何解决Graphql Mutation 出现内部服务器错误 500
viewmodelScope.launch {
val req = RequestCodeMutation(phoneNumber)
val response = try {
ApolloClientManager
.apolloClient
.suspendMutate(req)
}
catch (e: ApolloException) {
println(e.message)
isError.value = true
null
}
finally {
loading.value = false
}
val requestCode = response?.data?.requestCode
println(response?.errors)
}
suspend fun <D : Operation.Data,T,V : Operation.Variables> ApolloClient.suspendMutate(mutation: Mutation<D,V>): Response<T> =
mutate(mutation).toDeferred().await()
这是我在服务器端的验证器。它在 Graphiql 上显示正确,但是,我无法在客户端收到此消息。
requestCode = async (resolve,source,args,context,info) => {
let { phoneNumber } = args;
phoneNumber = validator.trim(phoneNumber);
Object.assign(args,{ phoneNumber });
if (!validator.isMobilePhone(phoneNumber)) {
throw new UserInputError('Invalid phone number provided!');
}
return resolve(source,info);
}
ApolloException.message
显示内部服务器错误,response?.errors
显示 null
。
response?.errors
不应该是 null
并显示在 GraphiQL 上显示的正确错误消息。
解决方法
在您的 catch 块中,您可以基于 ApolloCall
构建一个新的 Response。
请考虑以下事项:
import com.apollographql.apollo.api.Response
import com.apollographql.apollo.api.Error
fun <T> executeCall(call: ApolloCall<T>): Response<T> = try {
apolloCall.toDeferred().await()
} catch (apolloException: ApolloException) {
val error = Error(apolloException.message ?: "Unknown Error")
Response.builder(apolloCall.operation()).errors(listOf(error)).build()
}
注意:我假设 ApolloClientManager.apolloClient.suspendMutate(req)
返回一个 ApolloCall<T>
实例。
然后你可以像这样使用这个函数:
val call = ApolloClientManager.apolloClient.suspendMutate(RequestCodeMutation(phoneNumber))
val response = executeCall(call)
// check the response status code
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。