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

GraphQL-Yoga中返回枚举类型的解析器函数写法咨询

在GraphQL-Yoga中返回枚举类型的解析器实现方法

别担心,这个其实比你想的简单!GraphQL对枚举类型的处理很直接,你只需要在解析器里返回枚举定义对应的字符串值就行,GraphQL会自动帮你映射到Schema里的枚举类型。

首先先修正下你Schema里的小语法问题,正确的Query定义应该是这样的:

type Query {
  search: CreateUrlResponse!
}

type CreateUrlResponse {
  searchResult: String!
  error: CreateUrlError
}

enum CreateUrlError {
  Error1
  Error2
}

接下来是解析器的实现,核心就是在需要返回错误时,直接返回枚举的字符串名称(注意大小写要和Schema里的枚举值完全一致),没有错误时返回null即可。这里给你一个完整的业务场景示例:

export const query = {
  async search(parent, args, ctx: Context, info) {
    try {
      // 替换成你的实际业务逻辑,比如调用服务执行搜索
      const searchResult = await ctx.urlService.performSearch();
      
      // 成功时返回结果,error字段设为null
      return {
        searchResult,
        error: null
      };
    } catch (error) {
      // 根据业务错误的标识,返回对应的枚举值
      if (error.code === "INVALID_INPUT") {
        return {
          searchResult: "", // 或者根据需求设置合理的默认值
          error: "Error1" // 直接返回枚举的字符串名称
        };
      } else if (error.code === "DB_FAILURE") {
        return {
          searchResult: "",
          error: "Error2"
        };
      }

      // 处理未预期的错误,也可以返回默认枚举或者直接抛出错误
      throw new Error("搜索过程中出现未预期的错误");
    }
  }
};

关键注意点:

  • 枚举值是大小写敏感的,必须和你Schema里定义的Error1、Error2完全一致,不能写成小写或者其他变体
  • 因为你的error字段是非必填类型(Schema里没有!标记),所以没有错误时返回null就符合类型要求
  • 不需要额外做类型转换,GraphQL-Yoga会自动将你返回的字符串映射为对应的枚举类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:58:59