GraphQL查询返回空值排查:API数据获取失败问题求助
你的GraphQL查询返回空值的原因及修复方案
我帮你排查了下代码,发现几个关键问题导致返回空值,咱们一个个来看:
1. API响应结构不匹配(最核心原因)
reqres.in的用户详情接口返回的JSON结构是嵌套的,实际的用户数据在response.data.data字段里,而不是直接返回response.data。你现在的resolve函数返回的是整个接口响应对象(包含data和support两个字段),但你的particularUser Schema只定义了用户的id、first_name等字段,GraphQL在返回的对象里找不到这些字段,自然就返回空值了。
2. ID类型不统一
你的查询参数id定义的是GraphQLString,但particularUser里的id字段是GraphQLInt,虽然reqres.in接口接受字符串格式的ID也能正常请求,但类型统一能避免潜在的类型转换问题,建议把参数类型改成GraphQLInt。
3. 错误处理不够规范
直接返回error对象可能会让GraphQL返回不符合预期的错误结构,建议抛出标准的错误信息,这样客户端能更清晰地看到问题所在。
修复后的完整代码
修改resolve函数
resolve: (_, { id }) => { console.log({ id }); const url = `https://reqres.in/api/users/${id}`; console.log(url); return axios.get(url) .then((response) => { console.log(response.data.data); // 这里会打印正确的用户数据 return response.data.data; // 返回嵌套在data里的用户对象 }) .catch((error) => { throw new Error(`Failed to fetch user: ${error.message}`); }); }
修改查询参数的ID类型
args: { id: { type: new GraphQLNonNull(GraphQLInt) } }
这样修改后,你的查询应该就能正常返回用户数据了。
内容的提问来源于stack exchange,提问作者user8934737
相关产品推荐
相关产品推荐

