如何在Apollo GraphQL的Mutation Resolver中访问models对象
Apollo Mutation Resolver 获取上下文models对象方案
所有GraphQL Resolver(Query/Mutation/自定义类型字段)的参数顺序是固定的,共4个,顺序不可调整:
- 第1位:
parent,父级字段的返回结果 - 第2位:
args,客户端调用当前字段时传入的参数 - 第3位:
context,服务端初始化时全局注入的上下文对象,你配置的models就存在这个对象上 - 第4位:
info,当前GraphQL请求的语法树元信息,一般业务场景用不到
你拿不到models的核心原因是uploadFile方法只声明了前2个入参,根本没有接收第三个上下文参数,自然读不到挂载在上下文上的models。
另外你之前尝试把models加入Mutation入参列表的思路是错的:models是服务端注入的全局上下文内容,不是客户端通过GraphQL请求传进来的字段参数,不可能从第二个args参数里拿到。
修正后的Resolver代码如下:
export const FileResolver = { Upload: GraphQLUpload, Mutation: { uploadFile: async (parent, { file }, { models }) => { // 此处可直接访问models对象,正常调用对应数据模型方法即可 // 文件上传业务逻辑 } } }
如果按上述写法修改后依然无法获取models,可排查两个点:
- 确认Apollo Server初始化时的context配置正确,确实将models挂载到了上下文返回值上——Query类型Resolver能正常拿到models的话,这一步配置基本不会有问题
- 确认当前FileResolver已经正确合并到总resolver配置中,传入了Apollo Server实例初始化参数,不存在导出错误、拼写错误导致Resolver未生效的问题
内容的提问来源于stack exchange,提问作者Gonzalo
相关产品推荐
相关产品推荐

