Graphql 如何将apollo server默认解析程序与函数一起使用?
在Graphql工具文档的默认解析器部分中,它声明Graphql 如何将apollo server默认解析程序与函数一起使用?,graphql,apollo-server,Graphql,Apollo Server,在Graphql工具文档的默认解析器部分中,它声明 从obj返回具有相关字段名的属性,或 使用相关字段名调用obj上的函数,并将查询参数传递到该函数中 类型定义: type AggregateMessage { count: Int! } 给定此查询解析器: Query: { async messagesConnection(root: any, args: any, context: any, info: any) { const messages: IMessag
type AggregateMessage {
count: Int!
}
给定此查询解析器:
Query: {
async messagesConnection(root: any, args: any, context: any, info: any) {
const messages: IMessageDocument[] = await messageController.messages();
const edges: MessageEdge[] = [];
for (const node of messages) {
edges.push({
node: node,
cursor: node.id
});
}
// return messages;
return {
pageInfo: {
hasNextPage: false,
hasPreviousPage: false
},
edges: edges,
aggregate: {
count: () => {
// Resolve count only
return 123;
}
}
};
}
}
因此,如果我像这样手动定义解析器,它就会工作
AggregateMessage: {
count(parent: any, args: any, context: any, info: any) {
return parent.count();
// Default resolver normally returns parent.count
// I want it to return parent.count() by default
}
}
但是,如果我删除定义并依赖默认解析功能,它将无法工作
如果我删除手动解析器并依赖默认解析器行为调用属性名上的函数,我希望它按照文档中的第#2点调用函数parent.count()
Int不能表示非整数值:[函数计数]
问题原来是由graphql工具中的合并架构引起的
将解析程序传递到MergeSchema(而不是apollo server或makeExecutableSchema)时,函数的默认解析程序功能无法正常工作
我不确定这是否是预期的功能,但将解析器移动到makeExecutableSchema调用修复了该问题。该问题原来是由graphql工具中的合并架构引起的 将解析程序传递到MergeSchema(而不是apollo server或makeExecutableSchema)时,函数的默认解析程序功能无法正常工作
我不确定这是否是预期的功能,但将解析程序移动到makeExecutableSchema调用解决了这个问题。@Egor您的意思是链接其他内容吗?是的,对此表示抱歉)它的实际链接上面的代码没有理由不起作用。我可以像普通js一样在本地运行它,所以我怀疑这是一个类型脚本问题。包含您看到的错误(包括跟踪)会很有帮助,否则任何人都很难帮助您。查看您对AggregateMessage的定义也会很有帮助。我怀疑您将
count
定义为number
,而不是number |()=>number
Typescript没有抛出错误。当我查询apollo服务器(代码编译并运行)时,会显示错误。我使用的是graphql SDL,因此不确定如何定义它可以作为函数返回的类型。我特别尝试依赖apollo服务器的默认解析器功能。因此,如果我如图所示定义AggregateMessage resolver,那么它可以工作,但是如果我删除AggregateMessage resolver,那么如果count是一个函数,它就不能工作,但是如果count返回一个数字,它就可以工作。@Egor你是想链接其他东西吗?是的,很抱歉)它的实际链接没有理由上面的代码不能工作。我可以像普通js一样在本地运行它,所以我怀疑这是一个类型脚本问题。包含您看到的错误(包括跟踪)会很有帮助,否则任何人都很难帮助您。查看您对AggregateMessage的定义也会很有帮助。我怀疑您将count
定义为number
,而不是number |()=>number
Typescript没有抛出错误。当我查询apollo服务器(代码编译并运行)时,会显示错误。我使用的是graphql SDL,因此不确定如何定义它可以作为函数返回的类型。我特别尝试依赖apollo服务器的默认解析器功能。因此,如果我如图所示定义AggregateMessage解析器,那么它可以工作,但是如果我删除AggregateMessage解析器,那么如果count是一个函数,它就不工作,但是如果count返回一个数字,它就可以工作。