You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL-tools:如何编写resolver函数实现列表按ID查询并解决非空报错

问题根因
  • 你当前使用的Array.map()方法不符合需求:map会返回和原数组长度一致的新数组,匹配到对应id时返回link对象,未匹配的位置返回undefined,最终resolver返回的是数组而非Schema要求的单个Link对象,GraphQL解析url字段时无法取到对应属性返回null,触发非空字段报错。
  • 如果你之前测试Array.find()未成功,大概率是写法错误,find本身就是返回第一个符合匹配条件的单个元素,完全适配这个查询场景。
修复方案

直接替换link resolver的实现即可:

const resolvers = {
    Query: {
        feed: () => links,
        link: (parent, args) => links.find(link => link.id === args.id),
    },
}
补充说明

当前Schema中link字段定义为Link!非空类型,如果传入的id不存在,find会返回null,仍会触发非空报错。如果需要兼容id不存在的场景,可以做两种调整:

  • 将Schema中link字段定义改为link(id: ID!): Link,允许返回空
  • 在resolver中添加兜底逻辑,当find返回空时抛出明确的「ID不存在」错误

内容的提问来源于stack exchange,提问作者ezeYaniv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 13:24:03