GraphQL嵌套解析器处理nullable关联读null的id属性报错如何解决
问题原因
当EaUser不存在trainingLocation关联时,parent.relationships.trainingLocation.data 为null,你原有逻辑的判断条件Object.keys(parent.relationships.trainingLocation).length === 0只能覆盖trainingLocation为空对象的场景,无法覆盖trainingLocation对象存在但data为null的场景,此时直接访问.id就会抛出空指针错误。
修复后的解析器代码
如果你的运行环境支持ES2020+的可选链语法,可以直接用以下写法:
EaUser: { trainingLocation: async parent => { const rel = parent.relationships?.trainingLocation if (!rel?.data) return null return await getTrainingLocation(rel.data.id) } }
如果不支持可选链,替换为逐层判断的兼容写法:
EaUser: { trainingLocation: async parent => { if ( !parent.relationships || !parent.relationships.trainingLocation || !parent.relationships.trainingLocation.data ) { return null } return await getTrainingLocation(parent.relationships.trainingLocation.data.id) } }
修改后无关联的场景会直接返回null,符合GraphQL的类型定义要求,不会再抛出错误。
内容的提问来源于stack exchange,提问作者llhilton
相关产品推荐
相关产品推荐

