嵌套对象的Apollo Graphql解析器

嵌套对象的Apollo Graphql解析器,graphql,apollo-server,Graphql,Apollo Server,所以我有这样一种类型: type CardStatus { status: String lastUpdated: String } type CardCompany { cardStatus: CardStatus } type ExternalAccounting { cardCompany: CardCompany } type User { balance: String externalAccounting: ExternalAccounting }

所以我有这样一种类型:

type CardStatus {
  status: String
  lastUpdated: String
}

type CardCompany {
  cardStatus: CardStatus
}

type ExternalAccounting {
  cardCompany: CardCompany
}

type User {
  balance: String
  externalAccounting: ExternalAccounting
}
  const User = {
    balance: {...}
    externalAccounting: {
      cardCompany: {
        cardStatus: (root) => { (...) },
      },
    },
  }
const User = {
  balance: (root, args, context) => getBalance().then((res)=>res)
}

const CardCompany = {
  cardStatus: (root) => { (...) },
}
我的解析器看起来像这样

const User = {
  balance: (root, args, context) => getBalance().then((res)=>res)
  cardStatus: (??)
}
我想使用解析器在用户对象中设置嵌套的cardStatus字段

Balance是对象的直接字段,很简单-我只需运行一个解析器并返回结果即可获得Balance。我想为深度嵌套的cardStatus字段运行cardStatus api调用,但我不知道如何执行此操作。我在我的解析器中尝试过如下内容:

type CardStatus {
  status: String
  lastUpdated: String
}

type CardCompany {
  cardStatus: CardStatus
}

type ExternalAccounting {
  cardCompany: CardCompany
}

type User {
  balance: String
  externalAccounting: ExternalAccounting
}
  const User = {
    balance: {...}
    externalAccounting: {
      cardCompany: {
        cardStatus: (root) => { (...) },
      },
    },
  }
const User = {
  balance: (root, args, context) => getBalance().then((res)=>res)
}

const CardCompany = {
  cardStatus: (root) => { (...) },
}

但它不起作用,因为它没有设置用户对象的cardStatus嵌套字段。看起来应该相对容易,但我在网上找不到示例。

您应该在类型
CardCompany
下定义
cardStatus
解析程序

定义类型时,它们应该在冲突解决程序映射中处于同一级别。Apollo将负责根据每个嵌套字段的类型解析查询的嵌套字段

因此,您的代码应该如下所示:

type CardStatus {
  status: String
  lastUpdated: String
}

type CardCompany {
  cardStatus: CardStatus
}

type ExternalAccounting {
  cardCompany: CardCompany
}

type User {
  balance: String
  externalAccounting: ExternalAccounting
}
  const User = {
    balance: {...}
    externalAccounting: {
      cardCompany: {
        cardStatus: (root) => { (...) },
      },
    },
  }
const User = {
  balance: (root, args, context) => getBalance().then((res)=>res)
}

const CardCompany = {
  cardStatus: (root) => { (...) },
}
我不确定它是如何连接到您的可执行模式的,但它可能类似于:

const schema = makeExecutableSchema({
  typeDefs,
  resolvers: merge(User, CardCompany, /* ... more resolvers */ )
})

请在你的问题中提供更多的细节——如果有些东西“不起作用”,你期望什么样的行为,你看到了什么样的行为?如果抛出错误,错误是什么?此外,还不清楚第三个代码段位于何处——如果包含所有解析程序的代码就更好了。