在 Graphql 突变上获取内部服务器错误 500
Posted
技术标签:
【中文标题】在 Graphql 突变上获取内部服务器错误 500【英文标题】:Getting Internal Server Error 500 on Graphql Mutation 【发布时间】:2021-04-10 02:50:45 【问题描述】: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, T, 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, args, context, info);
ApolloException.message
显示内部服务器错误,response?.errors
是 null
。
response?.errors
不应该是 null
并显示 GraphiQL 上显示的正确错误消息。
【问题讨论】:
您在 catch 块中返回null
。所以响应为空,response?.errors
@ChristianB 如果我返回任何其他内容,它不允许我访问响应的数据属性。该块应该返回什么?
【参考方案1】:
在您的 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
【讨论】:
我稍微更新了我的答案。希望对您有所帮助。apolloException.message
仍然是内部服务器错误。我希望消息是“提供的电话号码无效
我不知道你的意思或你的确切问题是什么。正如我所展示的,如果您发现异常,您可以创建一个新的错误消息。您可以创建一个新错误:val error = Error("Invalid phone number provided")
。希望对你有所帮助。
我已经编辑了我的问题,你现在可能能更好地理解它了
响应码是什么?是2xx还是一些错误?如果您收到ApolloException
,其中包含什么消息?以上是关于在 Graphql 突变上获取内部服务器错误 500的主要内容,如果未能解决你的问题,请参考以下文章
表达 http:graphql 突变上的 500 错误以在反应中从阿波罗客户端创建用户
是否可以从 Relay 突变访问 GraphQL 验证错误?