GraphiQL v1.5.1订阅请求含data与errors却仅显示errors的问题及解决
问题原因
- GraphiQL v1.5.1的订阅消息处理逻辑存在缺陷:该版本处理订阅WebSocket消息时,会优先识别
errors字段,只要消息中包含errors,就会直接渲染错误内容,完全忽略同时存在的data字段。而查询请求的处理逻辑没有这个限制,所以查询时能正常显示同时存在的data和errors。 - 这是该旧版本的已知行为,后续版本已修复此问题。
解决方法
- 升级GraphiQL版本:直接将GraphiQL升级到v2.0及以上版本,新版本修复了订阅场景下同时处理
data和errors的逻辑,能正常展示两者内容。 - 自定义修改GraphiQL的消息处理代码(仅自行部署场景):如果无法升级,找到订阅消息的处理模块,修改渲染逻辑——当WebSocket返回的消息同时包含
data和errors时,不跳过data的渲染,同时展示两部分内容。比如找到处理订阅更新的函数,调整条件判断,不要在存在errors时就终止data的渲染流程。 - 临时后端兼容方案(不推荐):在后端返回订阅消息时,避免同时返回
data和errors字段。比如当有部分错误时,要么只返回正确的data(忽略非致命错误),要么只返回errors(终止当前更新)。但这种方式不符合GraphQL规范,仅作为临时应急手段。
内容的提问来源于stack exchange,提问作者marvinfrede
相关产品推荐
相关产品推荐

