React中如何通过Apollo Client处理Neo4j GraphQL请求错误
在Apollo Client中捕获Neo4j GraphQL请求错误并打印到控制台
你可以通过两种核心方式捕获并打印错误:
1. 使用try/catch捕获异步请求异常
client.mutate是异步操作,当请求发生网络错误或GraphQL返回致命错误时会抛出异常,用try/catch可以直接捕获:
client_id="7b8c903a-3402"; text= "Some Text"; const preppedQuery = gql` mutation CreateMaps( $client_id: String! $text: String! ) { createMaps( input: [{ client_id: $client_id, text: $text }] ) { info { nodesCreated relationshipsCreated } maps { uid } } } `; try { const res = await client.mutate({ mutation: preppedQuery, variables: { client_id, text }, }); // 检查GraphQL返回的非致命业务错误(不会触发catch) if (res.errors) { console.error("GraphQL业务错误:", res.errors); } else { console.log("请求成功:", res.data); } } catch (error) { // 捕获网络错误或致命GraphQL错误 console.error("请求异常:", error); }
2. 配置errorPolicy获取完整错误信息
默认情况下Apollo Client遇到错误会抛出异常并忽略返回数据,设置errorPolicy: 'all'后,无论是否有错误,都能同时拿到数据和错误信息:
const res = await client.mutate({ mutation: preppedQuery, variables: { client_id, text }, errorPolicy: 'all', // 关键配置 }); // 统一处理错误和数据 if (res.errors) { console.error("GraphQL错误:", res.errors); } if (res.data) { console.log("返回数据:", res.data); }
补充说明:
res.errors是GraphQL返回的错误数组,包含字段验证错误、Neo4j数据库错误等业务相关错误。- catch块捕获的是网络层面的错误,或者Apollo Client判定的致命错误(比如查询语法错误)。
内容的提问来源于stack exchange,提问作者Sac
相关产品推荐
相关产品推荐

