我不确定__resolveType
函数在接口/联合上的用途/作用,但是我想它正在添加具有已解析类型的__typename
字段。但是,我似乎无法在graphql-modules
下使用它。这里是子集,但是我的架构的足够子集。
const typeDefs = gql`
interface Node {
id: ID!
}
type User implements Node {
id: ID!
email: String!
password: String
}
type Group implements Node {
id: ID!
name: String!
}
type Query {
node(id: ID!): Node
}`;
下面是我的解析器。
const resolvers = {
Query: {
node: () => {
return { id: 'abc', email: 'a@b.c', password: 'test' };
}
},
Node: {
__resolveType: () => {
console.log('__resolveType');
return 'User';
}
}
}
一起组合成一个模块。
const Module = new GraphQLModule({
resolvers,
typeDefs,
});
与Apollo服务器一样使用。
const server = new ApolloServer({
modules: [Module],
})
// Launch etc...
但是当查询node
时,__ resolveType没有得到记录,并且出现以下错误。
抽象类型节点必须在运行时解析为字段{。id:“ abc”,电子邮件:“ a@b.c”密码:“ test”}的Query.node的对象类型,收到“未定义”。 Node类型应提供“ resolveType”函数,或者每种可能的类型应提供“ isTypeOf”函数。”
我在做什么错了,我该如何解决这个问题?
快速说明:在__typename: 'User'
的返回对象中添加Query.node
似乎可行,但似乎不是理想的解决方案
答案 0 :(得分:3)
我遇到了同样的问题,可以确认使用graphql-modules时从未调用过__resolveType。我将在回购中提出一个问题,并引用此SO。将回传我得到的任何答案。
已在回购问题中报告了此问题,解决方法是将顶级模块架构传递给apollo服务器,而不是作为模块
({
schema: Appmodule.schema,
context: session => session
})
在此处查看问题。 https://github.com/Urigo/graphql-modules/issues/619
可以确认这是正常的