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
相关产品推荐
相关产品推荐

