Graphql 如何将apollo server默认解析程序与函数一起使用?

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

在Graphql工具文档的默认解析器部分中,它声明

  • 从obj返回具有相关字段名的属性,或
  • 使用相关字段名调用obj上的函数,并将查询参数传递到该函数中
  • 类型定义:

    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()

  • 使用相关字段名调用obj上的函数并传递 将参数查询到该函数中
  • 然而,它给出了一个类型错误,因为“count”被定义为Int类型,但实际上它是一个函数。如何正确执行此操作,以便在解析时调用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返回一个数字,它就可以工作。